UITableView通過重用單元格來達到節省內存的目的:通過為每個單元格指定一個重用標識符(reuseIdentifier),即指定了單元格的種類,以及當單元格滾出屏幕時,允許恢復單元格以便重用.對於不同種類的單元格使用不同的ID,對於簡單的表格,一個標識符就夠了.
假如一個TableView中有10個單元格,但是屏幕上最多能顯示4個,那么實際上iPhone只是為其分配了4個單元格的內存,沒有分配10個,當滾動單元格時,屏幕內顯示的單元格重復使用這4個內存,以下代碼用於測試內存的使用:
1 - (UITableViewCell *)tableView:(UITableView *)tableView 2 cellForRowAtIndexPath:(NSIndexPath *)indexPath 3 { 4 UITableViewCellStyle style = UITableViewCellStyleSubtitle; 5 static NSString *cellID = @"cell"; 6 UITableViewCell *cell = [tableView dequeueReusableCellWithIdentifier:cellID]; 7 if (cell == nil) 8 { 9 cell = [[[UITableViewCell alloc] initWithStyle:style reuseIdentifier:@"cell"] autorelease]; 10 cell.detailTextLabel.text = [NSString stringWithFormat:@"Cell %d",++count]; //當分配內存時標記 11 } 12 cell.textLabel.text = [NSString stringWithFormat:@"Cell %d",[indexPath row] + 1]; //當新顯示一個Cell時標記 13 return cell; 14 }
通過運行此代碼 會發現實際上分配的Cell個數為屏幕最大顯示數, 當有新的Cell進入屏幕時,會隨機調用已經滾出屏幕的Cell所占的內存,這就是Cell的重用