1. 計(jì)算UITableViewCell高度問題####
問題一:做ios開發(fā)的都知道在不定高的table里計(jì)算UITableViewCell高度是個(gè)很蛋疼的時(shí)
解決: UITableViewCell里的元素到使用約束布局培漏,根據(jù)約束來得到高度。就不用來自己計(jì)算高度了浇辜。
問題二:ios8跟ios7高度計(jì)算機(jī)制不同辕羽,ios7會緩存已經(jīng)得到過的高度,ios8每次都會去計(jì)算一次高度奔誓。
解決:自己做一下高度的緩存咯刃永。
問題三:在什么時(shí)候計(jì)算高度比較好呢硬猫?在滑動的時(shí)候再去計(jì)算高度,肯定也會消耗一些性能的对途。
解決:預(yù)緩存機(jī)制赦邻,利用RunLoop空閑時(shí)間執(zhí)行預(yù)緩存任務(wù)。
這三個(gè)問題大神都解決了实檀,原文鏈接
在一些不復(fù)雜的Cell可以用這種方法惶洲,可以加快開發(fā)效率按声,不用自己計(jì)算高度了。但是在一些復(fù)雜視圖里签则,還是自己用frame去計(jì)算高度,并自己在后臺線程里緩存比較好铐料,因?yàn)閍utolayout本身比frame是更消耗資源的渐裂。
以下內(nèi)容是對ibireme同學(xué)的iOS 保持界面流暢的技巧博文的學(xué)習(xí)。感謝大神的分享
2. CPU資源消耗優(yōu)化####
- 對象創(chuàng)建
盡量用輕量的對象代替重量的對象钠惩,可以對性能有所優(yōu)化柒凉。比如 CALayer 比 UIView 要輕量許多,那么不需要響應(yīng)觸摸事件的控件篓跛,用 CALayer 顯示會更加合適膝捞。
- 對象調(diào)整
對象的調(diào)整也經(jīng)常是消耗 CPU 資源的地方。當(dāng)視圖層次調(diào)整時(shí)愧沟,UIView蔬咬、CALayer 之間會出現(xiàn)很多方法調(diào)用與通知,所以在優(yōu)化性能時(shí)沐寺,應(yīng)該盡量避免調(diào)整視圖層次林艘、添加和移除視圖。
- 對象銷毀
我之前一般都不會取銷毀對象的混坞,看來我錯(cuò)了北启,一些沒用的資源還是要及時(shí)銷毀的。
如果對象可以放到后臺線程去釋放拔第,那就挪到后臺線程去。這里有個(gè)小 Tip:把對象捕獲到 block 中场钉,然后扔到后臺隊(duì)列去隨便發(fā)送個(gè)消息以避免編譯器警告蚊俺,就可以讓對象在后臺線程銷毀了。
NSArray *tmp = self.array;
self.array = nil;
dispatch_async(queue, ^{
[tmp class];
});
- 布局計(jì)算
視圖布局的計(jì)算是 App 中最為常見的消耗 CPU 資源的地方逛万。如果能在后臺線程提前計(jì)算好視圖布局泳猬、并且對視圖布局進(jìn)行緩存(可以在model里算好寬高位置等,不要多次計(jì)算)宇植,那么這個(gè)地方基本就不會產(chǎn)生性能問題了得封。