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是我们通过方法:
当重用池中没有cell是, 就会创建cell, 当重用池中有cell时就会被取出来,并且重新进行赋值. 就这样反复利用. 这就是我理解的重用池.(附带一句, 我感觉重用池就是一个队列, 大家可以好好体会一下)
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时就会被取出来,并且重新进行赋值. 就这样反复利用. 这就是我理解的重用池.(附带一句, 我感觉重用池就是一个队列, 大家可以好好体会一下)
相关文章推荐
- IOS 获取键盘的高度
- 自定义View之无限轮播Banner的实现:STBanner
- [第1章]地图:iOS模拟器的使用
- 从1开始学ios开发
- IOS-NSDate之今天,昨天,这周,这个月,上个月
- iOS8新特性扩展(Extension)应用之三——照片编辑插件
- iOS应用内付费(IAP)开发步骤列表
- ios调用相机之后状态栏消失
- 关于ios开发中的分模块开发
- Xcode6.0后IOS7.0之后的手势滑动
- iOS核心动画高级技巧之核心动画(三)
- iPhone 文件读写操作
- iOS远程推送原理
- IOS读取文件类和常用方法
- wxhl ios bj 49 张浩 学习心得体会连载 第三章
- iOS 隐藏状态栏
- iOS 显示HTML字符串
- 程序日志--ios“考反应扑克游戏”程序
- iOS 注意细节及使用方法
- 类中用于比较两对象的方法的原型 及ios_base用法