總結(jié)自YYKit作者的文章ios保持界面流暢的技巧
CPU資源消耗原因及解決方案
1,對象創(chuàng)建
對象的創(chuàng)建會分配內(nèi)存,調(diào)整屬性采驻,甚至還有讀取文件等操作宝当,都比較消耗CPU資源视事。
建議:1,盡量用輕量的對象代替重量的對象:
eg:CALayer 比 UIView要輕量許多今妄,如果不需要響應(yīng)觸摸事件的控件郑口,用CALayer顯示會
更加合適;
通過Storyboard創(chuàng)建視圖對象時盾鳞,其資源消耗會比直接通過代碼創(chuàng)建對象要大得多犬性;
2,盡量推遲對象創(chuàng)建的時間腾仅,并把對象的創(chuàng)建分散到多個任務(wù)中乒裆;
3,如果可以復(fù)用推励,就盡可能的從緩存池中復(fù)用對象鹤耍;
2肉迫,對象調(diào)整
對象的調(diào)整也是耗費(fèi)CPU資源的地方,
eg:CALayer并沒有屬性稿黄,當(dāng)給屬性賦值時喊衫,內(nèi)部是通過運(yùn)行時resolveInstanceMethod為對象
臨時添加一個方法,并把對應(yīng)的屬性值存儲在一個dictionary中杆怕,同時還會通知delegate族购,創(chuàng)
建動畫等等,非常消耗資源陵珍;UIView的相關(guān)屬性(frame等)都是layer映射過來的寝杖;
建議:在性能優(yōu)化時,盡可能的減少對象屬性的更改互纯,視圖層級調(diào)整瑟幕,添加和移除視圖;
3留潦,對象銷毀
通常當(dāng)容器內(nèi)持有大量對象時只盹,銷毀時資源的消耗也是非常明顯的;
小Tip:把對象放到Block中愤兵,然后扔到后臺隊(duì)列去隨便發(fā)送個消息以避免編譯器警告鹿霸,就可以讓對象在
后臺線程銷毀了。
NSArray *tmp = self.array;
self.array = nil;
dispatch_async(queue, ^{
[tmp class];
}