TableViewCell 復(fù)用
在cellForRowAtIndexPath:回調(diào)的時(shí)候只創(chuàng)建實(shí)例,快速返回cell,不綁定數(shù)據(jù)。在willDisplayCell: forRowAtIndexPath:的時(shí)候綁定數(shù)據(jù)(賦值)。
TableViewCell 高度緩存
在tableView滑動(dòng)時(shí),會(huì)不斷調(diào)用heightForRowAtIndexPath:,當(dāng)cell高度需要自適應(yīng)時(shí),每次回調(diào)都要計(jì)算高度,會(huì)導(dǎo)致 UI 卡頓。為了避免重復(fù)無(wú)意義的計(jì)算,需要緩存高度。
TableView刷新
局部刷新,刷新一個(gè)cell就能解決的,堅(jiān)決不刷新整個(gè)section或者整個(gè)tableView,刷新最小單元元素。
利用runloop提高滑動(dòng)流暢性,在滑動(dòng)停止的時(shí)候再加載內(nèi)容。
減少透明view的使用
只要一個(gè)視圖的不透明度小于1,就會(huì)導(dǎo)致blending,blending主要指的是混合像素顏色的計(jì)算。舉個(gè)例子,我們把兩個(gè)圖層疊加在一起,如果第一個(gè)圖層的有透明效果,則最終像素的顏色計(jì)算需要將第二個(gè)圖層也考慮進(jìn)來(lái)。這一過(guò)程即為Blending。
為什么Blending會(huì)導(dǎo)致性能的損失?
原因是很直觀的,如果一個(gè)圖層是不透明的,則系統(tǒng)直接顯示該圖層的顏色即可。而如果圖層是透明的,則會(huì)引入更多的計(jì)算,因?yàn)樾枰严旅娴膱D層也包括進(jìn)來(lái),進(jìn)行混合后顏色的計(jì)算。
避免臃腫的XIB文件
當(dāng)你加載一個(gè)XIB到內(nèi)存的時(shí)候,它所有的內(nèi)容都會(huì)載入內(nèi)存,包括所有的圖片。如果你有視圖但不是要立即使用,那你就浪費(fèi)了珍貴的內(nèi)存。
視圖的延遲加載
如果界面中有一部分視圖控件不需要立即顯示,則我們可以將它設(shè)計(jì)成延遲加載模式,當(dāng)真正要使用它的時(shí)候再進(jìn)行創(chuàng)建.
及時(shí)釋放不需要再使用的對(duì)象
把程序中不需要再使用的對(duì)象和內(nèi)存空間及時(shí)釋放,可以節(jié)省程序的內(nèi)存消耗,從而提高性能.
調(diào)整圖像視圖中的圖像尺寸
如果你用UIImageView呈現(xiàn)app束中的圖片時(shí),確認(rèn)圖片和UIImageView的尺寸相同??s放圖片會(huì)非常的耗時(shí),特別是當(dāng)你的UIImageView被嵌入U(xiǎn)IScrollView。
如果圖片是從遠(yuǎn)程服務(wù)器上下載的,有時(shí)你沒(méi)法控制圖片尺寸,或者你不能在服務(wù)器上在下載之前縮放它。在這些情況下你可以在圖片下載完成后手動(dòng)縮放一次,最好是在后臺(tái)進(jìn)程中。然在UIImageView中使用調(diào)整尺寸之后的圖片。
減少離屏渲染
當(dāng)一個(gè)視圖中有大量圓角,應(yīng)該考慮使用Core Graphics的技術(shù)進(jìn)行繪制操作(即Quarz2D繪圖)來(lái)實(shí)現(xiàn)圓角.替代cornerRadius,mask方案.或者可以考慮異步繪制.在異步線程中繪制圓角.
為了避免離屏渲染,你應(yīng)當(dāng)盡量避免使用 layer 的 border、corner、shadow、mask 等技術(shù)。當(dāng)你需要圖片圓角的時(shí)候,最好讓美工直接切圓角圖片
不要阻塞主進(jìn)程
永遠(yuǎn)不應(yīng)該在主線程中做任何繁重的工作。這是因?yàn)閁IKIt的所有工作都在主線程中進(jìn)行,比如繪畫(huà),管理觸摸,和響應(yīng)輸出。你的app的所有工作都在主線程上進(jìn)行就會(huì)有阻塞主線程的風(fēng)險(xiǎn),你的app會(huì)表現(xiàn)的反應(yīng)遲鈍。
減少重用大開(kāi)銷(xiāo)對(duì)象使用
有的對(duì)象的初始化非常慢,例如NSDateFormatter 和 NSCalendar,我們應(yīng)該盡量避免使用它們。