iOS UITableViewCell重用以及自定义Cell
来源:互联网 发布:js 中隐藏控件 编辑:程序博客网 时间:2024/05/29 13:11
今天来讲一下UITableViewCell的重用问题,记得有一次去面试,被问到UITableViewCell是怎么优化的?然后是怎么重用的?Cell重用缓存在哪里?当时怎么回答的不记得了,反正能答得都答了,不能答得在乱扯,结果一下就露馅了。好吧不扯了,进入正题。
UITableViewCell的重用是对列表的一种优化机制,试想一下,如果你有成千上万条数据需要显示,如果每条数据需要alloc一个cell,那要消耗多少的内存空间,所以就有了cell的重用机制,那么问题来了,cell是怎么重用的呢?
cell是通过一个缓存池来重用,每个cell都会注册一个identifier放入缓存池,当需要调用的时候就直接从缓存池里找对应的id,当不需要时就放入缓存池等待调用。
看代码:
- (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath { static NSString *CellIdentifier = [NSString stringWithFormat:@"Cell"]; UITableViewCell *cell = [tableView dequeueReusableCellWithIdentifier:CellIdentifier]; if (cell == nil) { cell = [[[UITableViewCell alloc] initWithStyle:UITableViewCellStyleDefault reuseIdentifier:CellIdentifier] autorelease]; } //config the cell return cell; }这段代码第一步,创建一个id字符串;第二步,从缓存池中取出相应的id的cell进行重用;第三步,如果没有这个cell就alloc这个cell,并注册它的id标识。
当一个屏幕可以容纳10个cell时,cell会被alloc10次,假设从cell1到cell10,然后当cell1移出屏幕,加入缓存池(并不会被release),第二步代码会起作用,从缓存池中找到对应的id的cell加载出来。
ok,我们现在已经知道cell是怎么重用的了,那么第二个问题:cell的缓存池在哪里?
当cell要alloc时,UITableView会在堆中开辟一段内存以供cell缓存之用,从结构上分析:NSMutableArray* visiableCells,和NSMutableDictionary* reusableTableCells两个结构。visiableCells内保存当前显示的cells,reusableTableCells保存可重用的cells。
那么我们接下来看自定义的cell怎么重用:
//首先自定义一个HY_Cell的类static NSString *reuseIdentity = @"Cell"; if (!isReuseIdentityRegisted) { UINib *nib = [UINib nibWithNibName:@"HY_Cell" bundle:nil]; //从nib中加载这个HY_Cell类 [tableView registerNib:nib forCellReuseIdentifier:reuseIdentity]; //注册这个自定义的cell的重用标识,并加入缓存池 isReuseIdentityRegisted = YES; } HY_Cell *resuCell = (HY_Cell*)[tableView dequeueReusableCellWithIdentifier:reuseIdentity]; // 从缓存池中取出自定义cell return resuCell;
好了,到这里基本cell的重用都讲完了。
- iOS UITableViewCell重用以及自定义Cell
- 自定义UITableViewCell重用cell
- ios中自定义cell,自定义UITableViewCell
- iOS编程------自定义UITableViewCell / cell自适应高度
- UITableViewCell 重用 cell错乱问题
- iOS 动态计算UITableViewCell 高度 以及计算UILable 高度 自定义Cell
- UITableViewCell自定义和重用
- iOS UITableViewCell重用问题
- iOS UITableViewCell重用问题
- iOS UITableViewCell重用问题
- iOS UITableViewCell重用问题
- iOS UITableViewCell重用问题
- iOS- UITableViewCell重用
- iOS UITableViewCell重用问题
- iOS UITableViewCell重用问题
- iOS UITableViewCell重用问题
- UITableViewCell重用问题,自定义与非自定义cell的两种处理方式
- iOS cell重用
- Android 应用程序管理机制
- Normalized Cut(归一化割)
- Android解析包时出现问题
- 证券 基础知识 真题
- UVA536 - Tree Recovery
- iOS UITableViewCell重用以及自定义Cell
- Linux 的make及makefile文件格式
- golang技术随笔(二)理解goroutine
- 循环-16. 猴子吃桃问题(15)
- zoj 2027 Travelling Fee
- CCLayer层
- linux字符设备驱动程序
- cURL模拟POST请求
- 一道关于编译和指针的题目