在使用第三方應用時,卻經常遇到性能上的問題,普遍表現在滾動時比較卡,特別是cell中包含圖片的情況時。
實際上針對性地優化一下就可以解決tableview滑動的時候卡頓的問題:
1.使用不透明的視圖。不透明的視圖可以提高渲染的速度。可以將cell及其子視圖的opaque屬性設置為yes(默認值)。
2.不要重復創建不必要的cell。uitable只需要一屏幕的uitablevcell對象即可。因此在cell不可見的時候,可以將其緩存起來,而在需要的時候繼續使用它即可。注意:cell被重用的時候,需要調用setneedsdispalyinrect或者setneedsdisplay方法重繪cell。
3.減少動畫效果的使用,最好不要使用。
4.減少視圖的數目。cell包含了textlabel、detailtextlabel和imageview等view、而你還可以自定義一些視圖放在它的contentview里,創建它會消耗較多的資源,。并且也影響渲染的性能。
5.cell包含圖片、并且數目較多、使用自定義的cell速度會比默認的快很多。
6.不要做多余的繪制工作。在實現drawRect的時候,它的rect參數就是需要繪制的區域,這個區域之外的不需要進行繪制。
7.預渲染圖像。
如果上訴幾點做到之后,當新的圖像出現的時候還是有點卡頓的現象,那么可以在圖像上下文中畫。導出UIimage對象,然后再繪制到屏幕。使用異步繪制
8.不要阻塞主線程。tableview在更新數據的時候,整個界面卡住不動,完全不響應用戶請求。常見的是網絡請求,等待時間長待數秒。
解決辦法:使用多線程,讓子線程去執行這些函數或者方法。
注意:當下載線程數超過2的時候,會顯著影響主線程的性能。所以在不需要響應用戶請求的時候,下載線程可以增加到5,不建議再增加了,以加快下載速度。如果用戶正在交互,應該把線程數量控制在2個以內。
9.提前計算并緩存好高度,因為heightforrowatindexpath調用非常的頻繁。
10.選擇正確的數據結構:學會選擇會業務場景最適合的數組結構是寫出高效代碼的基礎。比如,數組:有序的一組值。使用索引來查詢很快,使用值查詢很慢,插入/刪除很慢。字典:存儲鍵值對,用鍵來查找比較快。集合:無序的一組值,用值來查找比較快,插入/刪除很快。
11.gzip/zip壓縮:當從服務器下載相關附件時,可以通過gzip/zip壓縮后再下載,使得內存更小,下載速度更快。
如何為在tableview的cell中嵌套collectionview?
用自定義的繼承于UItableviewcell的類,在initwithframe的構造方法中,初始化自定義繼承自UIcollectionview的類。