UITableView中的cell的最佳化,uitableviewcell
1.cell的重用
所謂的cell的重用就是,視圖載入的時候只會建立當前視圖中的cell,或者比當前視圖多一點的cell, 當視圖滾動的時候,滾出螢幕的cell會放進緩衝中,滾進螢幕的cell會根據Identifier從緩衝中擷取cell,如此的迴圈往複,這樣只會建立固定的cell對象,節省了記憶體。
下面是重用cell的代碼:
//1. 定義重用的標識
static NSString *reuseId = @"tg";
//2,從緩衝中擷取重用cell
CZTgCell *cell = [tableView dequeueReusableCellWithIdentifier:reuseId];
//3.判斷如果cell等於nil 就建立cell
if (cell == nil) {
cell = [[[NSBundle mainBundle]loadNibNamed:@"CZTgCell" owner:nil options:nil]lastObject];
}
return cell;
2.為什麼定義重用標識符的時候,定義為靜態
cell調用的次數相當多,會建立多次標識符對象,而靜態變數只會建立一次開闢一塊記憶體,節省了記憶體空間。
3.cell的init方法的注意點
重寫init方法,添加子控制項時,在這個方法中,需要對控制項的一次性屬性進行設定,所謂的一次性屬性,指的是像文字的大小啊文字的顏色啊之類的固定值,因為這些屬性和資料沒有關係,提高了效能。
注意:設定控制項的frame,直接在init方法中headView的frame沒有效果,所以要在layoutSubviews方法中設定各個子控制項的frame,這個方法必須重寫父類的方法。
4.cell重用的時候,不光要覆蓋資料,也應該要覆蓋對應的狀態,否則重用的時候會把狀態和資料都會重用
重用解決:在重寫模型的set方法,覆蓋資料和狀態。
5.cell的行高的問題
cell建立之前多次計算行高,如果行高是固定的,那盡量少用下面的代理方法,因為它會多次調用並計算行高,可以用tableView的rowHeight屬性
-(CGFloat)tableView:(UITableView *)tableView estimatedHeightForRowAtIndexPath:(NSIndexPath *)indexPath;