iOS UITableView重用机制

前言

UITableView可以说是iOS开发中最为常用、最为重要的一个控件,相信每个iOS开发者对他都不会陌生,但是你真正了解它的工作原理了吗?下面让我们来了解下UITableView的重用机制。

为什么要用重用机制

众所周知,UITableView是可以滚动的一个控件,当UITableView回滚时,如果不用重用机制会重复初始化原来已初始化的cell,所以用重用机制会节省性能,避免出现一些因为网络因素而造成的卡顿现象。

UITableView重用机制的原理

重用机制主要用到了一个可变数组visiableCells和一个可变的字典类型reusableTableCells,其中visiableCells用来存储当前UITableView显示的cell,reusableTableCells用来存储已经用'identify'缓存的cell。当UITableView滚动的时候,会先在reusableTableCells中根据identify找是否有有已经缓存的cell,如果有直接用,没有再去初始化。

UITableView重用的几种写法

1
      static NSString *cellID = @"cell";
      //根据identify在缓存的字典中找是否有已经初始化好的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
{
    // 重用队列中取单元格 由于上面已经注册过单元格,系统会帮我们做判断,不用再次手动判断单元格是否存在
    UITableViewCell *cell = [tableView dequeueReusableCellWithIdentifier: identifier forIndexPath:indexPath] ;
    return cell ;
}

这种方式的原理和前一种类似,先注册一个类(也就是告诉编译器这个类可能是我们即将要用来初始化的类)然后根据identify去缓存字典中找是否有这个cell,如果没有的话判断初始化类和注册类符不符合,如果相符就初始化一个新的cell.

特殊情况

有的时候我们会遇到每个cell都大致相同,但是又有细微变化,会让每个cell都单独一个而不互相复用,这时候我们可以指定每个cell的identify这样就不会变了。

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

最后编辑于 :
©著作权归作者所有,转载或内容合作请联系作者
【社区内容提示】社区部分内容疑似由AI辅助生成,浏览时请结合常识与多方信息审慎甄别。
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

相关阅读更多精彩内容

友情链接更多精彩内容