UITableView的重用機制

- (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath{
    static NSString *indentifier =@"Cell";
    UITableViewCell *cell = [tableViewdequeueReusableCellWithIdentifier:indentifier];
    if (!cell) {
//        cell = [[NSBundle mainBundle]loadNibNamed:@"UCFBackMoneyCell" owner:self options:nil][0];//用xib創建的cell
        cell = [[UITableViewCellalloc]initWithStyle:UITableViewCellStyleDefaultreuseIdentifier:indentifier];
    }
    return cell;
}
  1. UITableView內部會有兩個NSMutableArray:visiableCells內保存當前顯示的cells,reusableTableCells保存可重用的cells。

  2. TableView顯示之初,reusableTableCells為空,那么[tableView dequeueReusableCellWithIdentifier:indentifier]返回nil。

  3. 開始的cell都是通過[[UITableViewCell alloc] initWithStyle:UITableViewCellStyleDefault reuseIdentifier:indentifier] 來創建,而且cellForRowAtIndexPath只是調用最大顯示cell數的次數。 比如:有100條數據,iPhone一屏最多顯示10個cell。

  4. 程序最開始顯示TableView的情況是:

  • 用[[UITableViewCell alloc] initWithStyle:UITableViewCellStyleDefault reuseIdentifier:indentifier]創建10次cell,并給cell指定同樣的重用標識(當然,可以為不同顯示類型的cell指定不同的標識)。并且10個cell全部都加入到visiableCells數組,reusableTableCells為空。

  • 向下拖動tableView,當cell1完全移出屏幕,并且cell1(它也是alloc出來的,原因同上)完全顯示出來的時候。cell1加入到visiableCells,cell1移出visiableCells,cell1加入到reusableTableCells。

  • 接著向下拖動tableView,因為reusableTableCells中已經有值,所以當需要顯示新的cell,cellForRowAtIndexPath再次被調用的時候,[tableView dequeueReusableCellWithIdentifier:indentifier]返回cell1。 cell1加入到visiableCells,cell1 移出reusableTableCells;cell2移出 visiableCells,cell2加入到reusableTableCells。之后再需要顯示的Cell就可以正常重用了。

  • 注意:配置Cell的時候一定要注意,對取出的重用的cell做重新賦值,避免遺留老數據。

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

推薦閱讀更多精彩內容