1.cell的重用 所謂的cell的重用就是,視圖載入的時候只會創建當前視圖中的cell,或者比當前視圖多一點的cell,當視圖滾動的時候,滾出屏幕的cell會放進緩存中,滾進屏幕的cell會根據Identifier從緩存中獲取cell,如此的迴圈往複,這樣只會創建固定的cell對象,節省了記憶體。下...
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;