iOS UITableView重用機制

前言

UITableView可以說是iOS開發(fā)中最為常用、最為重要的一個控件,相信每個iOS開發(fā)者對他都不會陌生,但是你真正了解它的工作原理了嗎?下面讓我們來了解下UITableView的重用機制。

為什么要用重用機制

眾所周知,UITableView是可以滾動的一個控件,當UITableView回滾時,如果不用重用機制會重復初始化原來已初始化的cell,所以用重用機制會節(jié)省性能,避免出現(xiàn)一些因為網(wǎng)絡因素而造成的卡頓現(xiàn)象。

UITableView重用機制的原理

重用機制主要用到了一個可變數(shù)組visiableCells和一個可變的字典類型reusableTableCells,其中visiableCells用來存儲當前UITableView顯示的cell,reusableTableCells用來存儲已經(jīng)用'identify'緩存的cell。當UITableView滾動的時候,會先在reusableTableCells中根據(jù)identify找是否有有已經(jīng)緩存的cell,如果有直接用,沒有再去初始化。

UITableView重用的幾種寫法

1
      static NSString *cellID = @"cell";
      //根據(jù)identify在緩存的字典中找是否有已經(jīng)初始化好的cell
      UITableView *cell = [tableView dequeueReusableCellWithIdentifier:cellID];
        if (!cell) {
            cell = [[HORTransitReportCell alloc] initWithStyle:UITableViewCellStyleValue2 reuseIdentifier:cellID];
        }
      return cell;
2 注冊的方式
[self.tableView registerClass:[UITableViewCell class] forCellReuseIdentifier: identifier] ;
- (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath
{
    // 重用隊列中取單元格 由于上面已經(jīng)注冊過單元格,系統(tǒng)會幫我們做判斷,不用再次手動判斷單元格是否存在
    UITableViewCell *cell = [tableView dequeueReusableCellWithIdentifier: identifier forIndexPath:indexPath] ;
    return cell ;
}

這種方式的原理和前一種類似,先注冊一個類(也就是告訴編譯器這個類可能是我們即將要用來初始化的類)然后根據(jù)identify去緩存字典中找是否有這個cell,如果沒有的話判斷初始化類和注冊類符不符合,如果相符就初始化一個新的cell.

特殊情況

有的時候我們會遇到每個cell都大致相同,但是又有細微變化,會讓每個cell都單獨一個而不互相復用,這時候我們可以指定每個cell的identify這樣就不會變了。

      static NSString *cellID = [NSString format@"cell%ld%ld",indexPath.section,indexPath.row];
      //根據(jù)identify在緩存的字典中找是否有已經(jīng)初始化好的cell
      UITableView *cell = [tableView dequeueReusableCellWithIdentifier:cellID];
        if (!cell) {
            cell = [[HORTransitReportCell alloc] initWithStyle:UITableViewCellStyleValue2 reuseIdentifier:cellID];
        }
      return cell;

最后編輯于
?著作權歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時請結合常識與多方信息審慎甄別。
平臺聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點,簡書系信息發(fā)布平臺,僅提供信息存儲服務。

相關閱讀更多精彩內(nèi)容

友情鏈接更多精彩內(nèi)容