23 选调、UITableView有哪些優(yōu)化方式
?? 1、?? ?提前計算并緩存好高度(布局)仁堪,因為heightForRowAtIndexPath:是調(diào)用最頻繁的方法哮洽;
?? 2弦聂、異步繪制,遇到復雜界面莺葫,遇到性能瓶頸時匪凉,可能就是突破口徙融;
?? 3、滑動時按需加載欺冀,這個在大量圖片展示,網(wǎng)絡加載的時候很管用
?? 4隐轩、Cell的復用
?? 5饺饭、盡量少使用或者不用透明的圖層
?? 6职车、用異步加載數(shù)據(jù),緩存請求結(jié)果
?? 7悴灵、減少subView的數(shù)量
?? 8、異步刷新
?? 9积瞒、提前注冊
24 川尖、請簡述iOS中的事件傳遞機制
點擊一個UIView或產(chǎn)生一個觸摸事件A茫孔,這個觸摸事件A會被添加到由UIApplication管理的事件隊列中(即,首先接收到事件的是UIApplication)缰贝。
UIApplication會從事件對列中取出最前面的事件(此處假設為觸摸事件A)馍悟,把事件A傳遞給應用程序的主窗口(keyWindow)剩晴。
窗口會在視圖層次結(jié)構中找到一個最合適的視圖來處理觸摸事件。
事件交由第一響應者對象處理,如果第一響應者不處理宠哄,事件被沿著響應鏈向上傳遞,交給下一個響應者毛嫉,直到事件被丟棄
GCD原生并不支持取消操作诽俯。
dispatch_suspend函數(shù)也只能暫停開啟新的未執(zhí)行的block承粤,已經(jīng)處于執(zhí)行中的block是無法暫停的。
但是辛臊,通過參考NSOperation的cancel機制,你只要加一個外邊變量彻舰,用于標記block是否需要取消。然后block中通過及時的檢測這個外部變量的狀態(tài)刃唤,當發(fā)現(xiàn)需要取消時隔心,停止block中的后續(xù)操作尚胞,釋放資源。就能達到及時取消block的目的笼裳。這里有個例子:https://github.com/Tinghui/HUIGCDDispatchAsync