最近一直因为这个问题困扰着我,经过到处询问以及查询,终于弄明白些了,下面希望跟大家分享一下。
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就不能相同了,书在这方面都写得很笼统,一句就带过了。