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