tableView的優化

tableView優化:

1.cell的重用

2.dequeueReusableCellWithIdentifier:forIndexPath:(會調用heightForRowAtIndexPath)和dequeueReusableCellWithIdentifier (后面這個不會再次調用heightForRowAtIndexPath)

2.1 tableView在cell顯示之前會調用heightForRowAtIndexPath,有多少個cell就會調用多少次,算contentSize

2.2使用了預估行高,并不會在顯示之前去計算獲取所有的行高(預估行高,等cell要顯示的時候才回去計算真實的高度),根據預估行高和實際行高來獲取cell的行高,先根據預估行高計算好要先獲取幾個cell,如果計算的這幾個cell高度確實夠(高度能超出屏幕的高度就不計算了.如果不夠還會計算),目的也是讓contentSize大于屏幕,就能滾動,后面要顯示,才來計算行高,所以會發現滾動條會跳

3.cell的高度是根據內容變化的時候,只計算一次,將高度緩存起來

overridefunctableView(tableView:UITableView, heightForRowAtIndexPath indexPath:NSIndexPath) ->CGFloat{

//獲取模型

letstatus =self.statuses![indexPath.row]

//判斷模型里面之前有沒有緩存過行高

ifstatus.rowHeight!=nil

{

//之前保存過行高,直接返回行高

returnstatus.rowHeight!

}

//自己計算行高:AutoLayout自動約束

//讓cell設置對應內容,可以直接直接獲取,這個cell不參與顯示

letcell = tableView.dequeueReusableCellWithIdentifier(ReuseIndentifier)as!HMStatusCell

cell.status= status

letheight = cell.systemLayoutSizeFittingSize(UILayoutFittingCompressedSize).height

status.rowHeight= height

returnheight

}

4.下載圖片使用SDWebImage(異步操作)

5.cellForRowAtIndexPath不要做耗時操作

1.讀取文件,寫入文件,最好是放到子線程,或先讀取好,在讓tableView去顯示

2.盡量不要再這個方法里解壓資源

3.盡量少得計算計算,最好是先計算好,cellForRowAtIndexPath只做顯示

4.盡量不要去添加和移除view,現將會用到的控件懶加載,要就顯示,不要就隱藏

6.tableView滾動的時候,不要去做動畫(微信的聊天界面做的就很好,在滾動的時候,動態圖就不讓他動,滾動停止的時候才動,不然可能會有點影響流暢度)

7.cell里面的控件,約束最好不要使用remake,動態添加約束是比較耗性能的

8.cell里面的控件,背景最好是不透明的(圖層混合靠GPU去渲染,會影響性能,綠色的好,紅色的性能差), view的背景顏色clearColor盡量少

9.圖片圓角不要使用layer.cornerRadius,因為通過圖層去渲染的話都會影響性能

10.圖層最好不要使用陰影,陰影會導致離屏渲染(在進入屏幕渲染之前,還看不到的時候會再渲染一次,盡量不要產生離屏渲染)

11.異步繪制

12.柵格化

13.借助工具來測試性能

14.AsyncDisplayKit ->不使用UIKit (UIView) ->? (Node)

最后編輯于
?著作權歸作者所有,轉載或內容合作請聯系作者
平臺聲明:文章內容(如有圖片或視頻亦包括在內)由作者上傳并發布,文章內容僅代表作者本人觀點,簡書系信息發布平臺,僅提供信息存儲服務。

推薦閱讀更多精彩內容