IOS之UITableView优化-可重用机制
来源:互联网 发布:鞋子淘宝试用报告范文 编辑:程序博客网 时间:2024/04/30 23:36
一、UITableViewCell的可重用机制
目的:为了做到显示和数据分离, 通过重用单元格来达到节省内存的目的
1.使用可重用机制创建cell(系统)
1)定义可重用标识
2)从可重用队列中取出cell
3)若队列中无可用cell,利用alloc,init新建cell
static NSString *reuseIndentifier = @"MyCell"; UITableViewCell *cell = [tableView dequeueReusableCellWithIdentifier:reuseIndentifier]; if (!cell) { cell = [[UITableViewCell alloc] initWithStyle:UITableViewCellStyleDefault reuseIdentifier:reuseIndentifier]; }</span>ps:记得要在设置控件的Indentifier属性为MyCell
2.原理
在UITableView的头文件中有visibleCells,存放当前显示的的cells
@property (nonatomic,readonly)NSArray<__kindofUITableViewCell *> *visibleCells;
当需要更新显示数据时,dequeueReusableCellWithIdentifier会先在可重用cell队列 reusable-cell queue中返回一个cell对象,若不存在,则返回nil;
3.举例
若一共有50条数据,屏幕最多显示10个cell。
1)由于初始时 reusable-cell queue为空,所以用 [[UITableViewCell
2)向下拖动tableView,当cell1完全移出屏 幕,并且cell11(它也是alloc出来的,原因同上)完全显示出来的时候。 cell11加入到visiableCells,cell1移出visiableCells,cell1加入到 reusable-cell queue。
3. 接着向下拖动tableView,因为 reusable-cell queue中已经有可用cell对象,所以,当需要显示新的cell,cellForRowAtIndexPath再次被调用的时候,tableView
重取出来的cell是有可能已经捆绑过数据或者加过子视图的,造成视图叠加混乱的现象
解决:
1)删除已有数据或子视图
2)放弃了重用机制,每次根据indexPath获取对应的cell返回。
将方法: UITableViewCell *cell = [tableView dequeueReusableCellWithIdentifier:reuseIndentifier];
替换为: UITableViewCell *cell = [tableView cellForRowAtIndexPath:indexPath];
5.自定义cell的可重用机制使用
1)在nib中加载MyCell这个类
2)注册自定义的cell 的可重用标识
UINib *nib = [UINib nibWithNibName:@"MyCell" bundle:nil]; [tableView registerNib:nib forCellReuseIdentifier:reuseIdentity];用标识,并加入缓存池3)同上系统cell的使用
- IOS之UITableView优化-可重用机制
- IOS开发之----UITableView重用机制
- IOS开发之----UITableView重用机制
- iOS之UITableView Cell重用机制
- iOS UItableview重用机制
- iOS UITableView的重用机制
- ios UITableView中Cell的重用机制
- iOS—UITableView Cell重用机制
- ios UITableView中Cell的重用机制
- 【iOS沉思录】UITableView的重用机制与加载优化详解
- iOS cell的可重用机制
- iOS 开发之UITableView避免重用
- UItableView的重用机制
- UITableView的重用机制
- UITableView的重用机制
- UITableView重用机制
- UITableView重用机制
- UITableView重用机制
- 记录错误16.8.12 android receiver dialog
- [ Android Studio ]关于编译报错 缓存 问题
- 原始数据的分析
- 运维自动化需要的讨论
- 解决微信浏览器无法使用reload()刷新页面
- IOS之UITableView优化-可重用机制
- 如何直接为价廉的ESP8266 WiFi模块编写程序
- javascript 数组
- android Broadcast
- AngularJS+ThinkPHP实例教程
- service的简单通信②
- 10天精通Sass 之 Sass基本语法二
- left join 学习笔记
- ScrollView中的那些坑