关于表格CELL重用dequeueReusableCellWithIdentifier

最近一直因为这个问题困扰着我,经过到处询问以及查询,终于弄明白些了,下面希望跟大家分享一下。
static NSString *CellTableIdentifier = @"CellTableIdentifier ";

UITableViewCell *cell = [tableView dequeueReusableCellWithIdentifier:
CellTableIdentifier];
if (cell == nil) {
cell = [[[UITableViewCell alloc]
initWithStyle:UITableViewCellStyleDefault
reuseIdentifier:CellTableIdentifier] autorelease];
}


先,先说一下重用是如何实现的,我们有一个很长的tableview,假设是100行,但在我们设计的行高情况下,屏幕只能显示10行,所以,当加载
view的时候,实际只创建这10个cell,当我们用手指向上滑动即下方的第11个cell向上滑进界面的过程中,我们发现第一行的cell会滑出界
面,当滑出后,第一行这个cell会被放到重用队列中,第11行将获得重用队列中的一个cell,这样,可以很好的控制内存。


这段代码中 UITableViewCell *cell = [tableView
dequeueReusableCellWithIdentifier:CellTableIdentifier];
意思是定义一个cell,在tableview中的可重用队列中寻找有CellTableIdentifier标识的UITableViewCell,以
进行重用。这个Identifier可以由我们自由定义成一些字符串。当然,如果在队列中有这样的UITableViewCell,那么则返回它给
cell,若没有,则返回nil给cell。因为我们在写程序时经常需要用到好几个表格,每个表格中的cell布局都不一样,所以我们需要将在同一个表格
的cell(布局一样)进行标记Identifier,这样,在重用的时候可以得到匹配的cell。


时,就是下面的if语句了,若返回的是nil,即cell==nil,则我们需要分配空间并初始化一个cell,而且需要关联
reuseIdentifier,以便后面重用的时候能够根据Identifier找到这个cell,若cell不为nil,则重用成功,并可
return此cell。

当然,有些朋友说在重用的过程中,经常会有cell重叠的情况发生,这个很容易理解,因为cell滑出界面后并被放到重用队列时,cell中的内容并不会消失,我们可以通过多种方式解决,在此我主要是说明重用的机制,大家有这方面的问题可以在网上找一下解决方法。

这是我以前遇到的问题,那时候想既然书上是说这样做是用来重用的,那个identity就是他的ID啦,是根据ID来进行重用,那么ID就不能相同了,书在这方面都写得很笼统,一句就带过了。

时间: 2024-10-07 02:45:02

关于表格CELL重用dequeueReusableCellWithIdentifier的相关文章

iOS开发之UITableView及cell重用

1.UITanleview有的两种风格 一种是Plain,一种是Grouped,可以从这里设置风格: 他们样式分别如下: Plain: Grouped: 2.tableView展示数据的过程: (1)首先,控制器要遵守UITableViewDataSource协议 @interface ViewController () <UITableViewDataSource> (2)调用数据源的下面方法得知一共有多少组数据 - (NSInteger)numberOfSectionsInTableVie

iOS开发之 cell重用后内容错乱

转自 http://www.cnblogs.com/ios8/p/ios-cell.html http://www.itnose.net/detail/6154013.html 一.清除缓存 tableView表格中的cell有重用机制,这是一个很好的东西,可以避免开辟很多的空间内存.但是有时候我们不想让它重用cell,,可以用以下的代码解决. 将这个代码放在: - (UITableViewCell *)tableView:(UITableView *)tableView cellForRowA

iOS UITableView的cell重用标识

转自   http://www.2cto.com/kf/201308/238449.html UITableView继承自UIScrollview,是苹果为我们封装好的一个基于scroll的控件.上面主要是一个个的 UITableViewCell,可以让UITableViewCell响应一些点击事件,也可以在UITableViewCell中加入 UITextField或者UITextView等子视图,使得可以在cell上进行文字编辑. UITableView中的cell可以有很多,一般会通过重用

UITableView和UICollectionView的cell重用问题

APP的一个页面用到了自定义的UITableViewCell,由于iOS框架的cell重用机制,遇到了一个BUG,总结一下 现象 自定义的UITableViewCell里有一个UIButton,点击这个button以后,需要改变cell的样式,包括换UILabel字体颜色,禁用该UIButton等.结果发现,点击按钮之后,不仅当前cell的字体颜色变了,还有另外几个cell的字体颜色也跟着变,而且是随机的 原因 后来想到,应该是由于iOS的cell重用机制造成的,原来的代码类似: -(void)

iOS中TableViewController的cell重用出错(内容错乱)

iOS中TableViewController的cell重用出错(内容错乱) - 简书 时间 2016 用我的双手,成就你的梦想 ---栋哥 今天我的心爱的程序又出现bug,对于我这个小菜来说,不得不说是非常苦恼的,主要是cell加载的时候因为重用池的问题而出现各种的bug,虽然程序没有崩掉,但是大大影响到我的心情,下面是最主要的一个问题 ,就是cell的重用问题, cell因为从重用池中调取,没有及时删除上面的内容而导致内容的各种出现, 这里有几个解决方案. UITableView继承自UIS

UITableView的cell重用标识

转自   http://www.2cto.com/kf/201308/238449.html UITableView继承自UIScrollview,是苹果为我们封装好的一个基于scroll的控件.上面主要是一个个的 UITableViewCell,可以让UITableViewCell响应一些点击事件,也可以在UITableViewCell中加入 UITextField或者UITextView等子视图,使得可以在cell上进行文字编辑. UITableView中的cell可以有很多,一般会通过重用

cell重用的几种方式

1.使用xib重用 //ios6 之后推荐大家使用的重用方式 //动态的使用self获得当前类名,来作为唯一的标示 NSString * identifier = NSStringFromClass([self class]); UINib * nib = [UINib nibWithNibName:identifier bundle:nil]; //注册 [tableView registerNib:nib forCellReuseIdentifier:identifier]; //先在缓存池

解决UITableView中Cell重用机制导致内容出错的方法总结

UITableView继承自UIScrollview,是苹果为我们封装好的一个基于scroll的控件.上面主要是一个个的 UITableViewCell,可以让UITableViewCell响应一些点击事件,也可以在UITableViewCell中加入 UITextField或者UITextView等子视图,使得可以在cell上进行文字编辑. UITableView中的cell可以有很多,一般会通过重用cell来达到节省内存的目的:通过为每个cell指定一个重用标识符 (reuseIdentif

UITableViewCell中cell重用机制导致内容重复的方法

UITableView继承自UIScrollview,是苹果为我们封装好的一个基于scroll的控件.上面主要是一个个的UITableViewCell,可以让UITableViewCell响应一些点击事件,也可以在UITableViewCell中加入UITextField或者UITextView等子视图,使得可以在cell上进行文字编辑. UITableView中的cell可以有很多,一般会通过重用cell来达到节省内存的目的:通过为每个cell指定一个重用标识符(reuseIdentifier