IOS-tableViewCell重用机制

首先介绍tableViewCell原生cell的使用和重用机制

使用dequeueReusableCellWithIdentifier方法,这个方法会从缓存池中,搜索有没有可以重用的cell,然后如果有的话,会进行重用。

- (UITableViewCell*)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath{
UITableViewCell *cell = [tableView dequeueReusableCellWithIdentifier:@"cell"];
if (!cell) {
cell = [[UITableViewCell alloc] initWithStyle:UITableViewCellStyleValue1 reuseIdentifier:@"cell"];
cell.textLabel.text = @"cellText";
//如果我们在缓存区中没有获取到cell,会在这里自动创建一个cell,并且将这个cell的重用名设置为cell,这样,我们用完了这个cell之后,cell放到了缓存区中,我们可以用dequeueReusableCellWithIdentifier方法将cell从缓存区中提取出来,进行重用。
} return cell;
}

自定义nib的重用机制

  • xib中指定cell的Class为自定义cell类型

  • 调用 tableView 的 registerNib:forCellReuseIdentifier:方法向数据源注册cell
  • 在cellForRowAtIndexPath中使用

    dequeueReuseableCellWithIdentifier :forIndexPath:

    获取重用的cell,若无重用的cell,将自动使用所提供的nib文件创建cell并返回(若使用旧式dequeueReuseableCellWithIdentifier:方法需要判断返回是否为空而进行新建)
xxxxxCell *cell = [tableView dequeueReusableCellWithIdentifier:kCellIdentify forIndexPath:indexPath];
  • 获取cell时若无可重用cell,将创建新的cell并调用其中的awakeFromNib方法,可通过重写这个方法添加更多页面内容

自定义cellClass的重用机制

  • 重写自定义cell的initWithStyle:withReuseableCellIdentifier:方法进行布局
- (id)initWithStyle:(UITableViewCellStyle)style reuseIdentifier:(NSString *)reuseIdentifier
{
self = [super initWithStyle:style reuseIdentifier:reuseIdentifier];
if (self)
{
// cell页面布局
[self setupView];
}
return self;
}
  • 为tableView注册cell,使用registerClass:forCellReuseIdentifier:方法注册(注意是Class)
[_tableView registerClass:[xxxxxCell class] forCellReuseIdentifier:kCellIdentify]; 
  • 在cellForRowAtIndexPath中使用

    dequeueReuseableCellWithIdentifier:forIndexPath:

    获取重用的cell,若无重用的cell,将自动使用所提供的class类创建cell并返回
xxxxxCell *cell = [tableView dequeueReusableCellWithIdentifier:kCellIdentify forIndexPath:indexPath]; 
  • 获取cell时若无可重用cell,将调用cell中的initWithStyle:withReuseableCellIdentifier:方法创建新的cell

总结:

  1. 在tableView的创建时,使用 registerClass: forCellReuseIdentifier: ,然后再使用dequeueReuseableCellWithIdentifier:,这样就相当于自动管理tableViewCell了,(cell如果可以重用,就直接重用了)

    但是我们也可以使用首先介绍tableViewCell原生cell的使用和重用机制 标题中的方式,来管理cell的重用机制,想过也是一样的。

  2. dequeueReuseableCellWithIdentifier: 方法:获取缓冲区中可以使用的cell,如果没有,但是已经使用registerClass: forCellReuseIdentifier: 注册了,那么他会自动创建。否则不会,需要手动创建。

IOS-tableViewCell重用机制的更多相关文章

  1. IOS之TableViewCell重用机制解决上下刷新重复显示

    首先我是一个经验浅薄的iOS开发人员,这个问题想必许多初学者经常遇到这些问题,在面试中也会经常问到.现在我们一一解决. 首先我们要知道TableViewCell重用机制的原理是什么,我们抽象的理解为古 ...

  2. ios之TableViewCell重用机制避免反复显示问题

    常规配置例如以下 当超过tableView显示的范围的时候 后面显示的内容将会和前面反复 // 这样配置的话超过页面显示的内容会反复出现 - (UITableViewCell *)tableView: ...

  3. IOS之TableViewCell重用机制避免重复显示问题

    常规配置如下 当超过tableView显示的范围的时候 后面显示的内容将会和前面重复. 1 // 这样配置的话超过页面显示的内容会重复出现 2 - (UITableViewCell *)tableVi ...

  4. iOS开发之--TableViewCell重用机制避免重复显示问题

    常规配置如下 当超过tableView显示的范围的时候 后面显示的内容将会和前面重复 // 这样配置的话超过页面显示的内容会重复出现 - (UITableViewCell *)tableView:(U ...

  5. IOS Cell重用机制

    重用机制: -(UITableViewCell *)tableView: (UITableView *)tableView cellForRowAtIndexPath: (NSIndexPath *) ...

  6. 52.tableViewCell重用机制避免重复显示问题

    表刷新超出页面显示的内容会重复出现 -(UITableViewCell*)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSInd ...

  7. iOS学习笔记(4) — UITableView的 重用机制

    iOS学习笔记(4) — UITableView的 重用机制 UITableView中的cell是动态的,在使用过程中,系统会根据屏幕的高度(480)和每个cell的高度计算屏幕中需要显示的cell的 ...

  8. iOS - UITableView中Cell重用机制导致Cell内容出错的解决办法

    "UITableView" iOS开发中重量级的控件之一;在日常开发中我们大多数会选择自定Cell来满足自己开发中的需求, 但是有些时候Cell也是可以不自定义的(比如某一个简单的 ...

  9. iOS基础篇(十三)——UITableView(一)重用机制

    UITableView是app开发中常用到的控件,功能很强大,常用于数据的显示.在学习UITableView使用之前,我们先简单了解一下: 1.UITableView的重用机制 UITableView ...

  10. IOS中UITableViewCell的重用机制原理

    创建UITableViewController子类的实例后,IDE生成的代码中有如下段落: - (UITableViewCell *)tableView:(UITableView *)tableVie ...

随机推荐

  1. maya 写UI 用到的工具

    import os cmds.window() scrollLayout = cmds.scrollLayout(w=150) cmds.gridLayout( numberOfColumns=30, ...

  2. WPF样式资源文件简单运用

    WPF通过资源来保存一些可以被重复利用的样式,下面的示例展示了简单的资源样式文件的使用: 一.xaml中定义资源及简单的引用 <Window.Resources > <!--wpf窗 ...

  3. Django设置TIME_ZONE和LANGUAGE_CODE为中国区域

    Django默认的timezone是 TIME_ZONE = 'America/Chicago' LANGUAGE_CODE = 'en-us' 设置为中国区域: TIME_ZONE = 'Asia/ ...

  4. WebApi(三)-属性路由 自定义访问路径

    启用属性路由: 1.在WebApiConfig中加入如下代码: //属性路由 config.MapHttpAttributeRoutes();

  5. 微软HoloLens技术解谜

    HoloLens 是什么? HoloLens 是微软发布的可穿戴式增强现实计算设备,它拥有这么几个关键要素: 它是增强现实产品,即 Augmented Reality(AR),AR 技术将计算机生成的 ...

  6. java 伪共享

    MESI协议及RFO请求典型的CPU微架构有3级缓存, 每个核都有自己私有的L1, L2缓存. 那么多线程编程时, 另外一个核的线程想要访问当前核内L1, L2 缓存行的数据, 该怎么办呢?有人说可以 ...

  7. 【UVA1416】(LA4080) Warfare And Logistics (单源最短路)

    题目: Sample Input4 6 10001 3 21 4 42 1 32 3 33 4 14 2 2Sample Output28 38 题意: 给出n个节点m条无向边的图,每条边权都为正.令 ...

  8. magic c c++ unix 注册机 注册码 破解版 下载

    说起来都是伤心的事情前段时间,忙于找工作,面试的公司和入职的公司,想想都觉得很奇葩,其中有一家叫什么湖南普天科技有限公司的,他们是从国防科大接项目做的,那天他们叫我去面试,面试完了,说我们这里有个c+ ...

  9. Java中类Exchaner浅析

    Exchaner用于实现两个人之间的数据交换,每个人在完成一定的事物后想与对方交换数据,第一个先拿出数据的人将一直等待第二个人拿着数据到来时,才能彼此交换数据. 张孝祥老师在讲解Exchaner时的比 ...

  10. Defining as a "long" or "int" type throws an error on startup

    solr启动时候,报如下异常: [java] view plaincopy SEVERE: org.apache.solr.common.SolrException          at org.a ...