iOS中tableView的cell的重用机制

来源:互联网 发布:sonyhdr as50软件 编辑:程序博客网 时间:2024/05/17 04:02

因为最近铺界面是用到了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时就会被取出来,并且重新进行赋值. 就这样反复利用. 这就是我理解的重用池.(附带一句, 我感觉重用池就是一个队列, 大家可以好好体会一下)

1 0
原创粉丝点击