您的位置:首页 > 移动开发 > IOS开发

iOS中tableView的cell的重用机制

2015-07-30 08:10 253 查看
因为最近铺界面是用到了tableView,, 所以我就研究了一下tableView的重用机制.

tableView的重用机制. 刚接触tableView时我就研究了一下它的重用机制, 但是时间长了就有点忘记了, 最近老师布置了有关tableView的作业使我又想起了它, 所以今天又复习了一下, 有不足的地方请大家见谅和指点. 所谓的重用池, 我认为就是装有已创建好的cell, 当用到时可以从重用池中直接调用.

我们可以模拟一个场景: 因为UITableViewCell是继承于UIView的, 所以我们可以在cell上添加许多的子视图, 当我们用成百上千行的cell来呈现数据时, 那得浪费多大的内存啊! 所以重用池就解决了这一问题.

我查找了一些资料, 有人说在tableView的SDK中会找到NSMutableArray* visiableCells,和NSMutableDictnery* reusableTableCells两个结构, 但是我只查到了visiableCells, 而且类型是NSArray, 所以我想现在用的tableView已经经过了改进, 但是它的大致原理是不变的, 手机屏幕上首次显示的cell是我们通过方法:
- (instancetype)initWithStyle:(UITableViewCellStyle)style reuseIdentifier:(NSString *)reuseIdentifier
创建的, 当我们向上滑动浏览数据是, 第一个cell将会慢慢的消失, 下面的cell就会慢慢的呈现出来, 所以上面第一个cell就会进入重用池中, 而从下面进入屏幕视野的cell就会从重用池中取出, 这样反复利用, 就不需要我们创建成百上千的cell来浪费大量的内存, 请看下面的代码

- (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath
{
static NSString *identifier = @"reuse";
UITableViewCell *cell = [tableView dequeueReusableCellWithIdentifier:identifier];
if (cell == nil) {
cell = [[[UITableViewCell alloc] initWithStyle:UITableViewCellStyleDefault reuseIdentifier:identifier] autorelease];
}

cell.textLabel.text = [self.arr objectAtIndex:indexPath.row];
return cell;
}


当重用池中没有cell是, 就会创建cell, 当重用池中有cell时就会被取出来,并且重新进行赋值. 就这样反复利用. 这就是我理解的重用池.(附带一句, 我感觉重用池就是一个队列, 大家可以好好体会一下)
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: