目录
- 一、UITableView的适配
- 二、UITableViewCell的自定义
- 三、UITableViewCell的高度处理
- 四、UITableViewCell的其他优化
- 五、UITableViewCell的重用机制
前言
本文将按平时的技术需求程度的顺序讲解UITableViewCell的知识。
iOS UITableViewCell(你需要的知识点都能在这里找到)。目前暂未完善,后续会补充完整。补充完整时候,此句会去掉。
一、UITableView的适配
二、UITableViewCell的自定义
1、自定义UITableViewCell
其他可参考:自定义UITableViewCell(registerNib: 与 registerClass: 的区别)
xxxxxCell *cell = [tableView dequeueReusableCellWithIdentifier:kCellIdentify forIndexPath:indexPath];
①如果是[_tableView registerNib:[UINib nibWithNibName:@"xxxxxCell" bundle:nil] forCellReuseIdentifier:kCellIdentify];
获取cell时若无可重用cell,将创建新的cell并调用其中的awakeFromNib方法,可通过重写这个方法添加更多页面内容
②如果是[_tableView registerClass:[xxxxxCell class] forCellReuseIdentifier:kCellIdentify];
获取cell时若无可重用cell,将调用cell中的initWithStyle:withReuseableCellIdentifier:方法创建新的cell
三、UITableViewCell的高度处理
1、UITableViewCell的高度一定要计算吗?或者说一定要实现- (CGFloat)tableView:(UITableView *)tableView heightForRowAtIndexPath:(NSIndexPath *)indexPath
方法吗?
答:一定要计算,但是不一定要自己计算。iOS8之后有自动计算机制,需要autolayout(适用iOS8之后系统)。
相关方法,请查看文章四种方法实现UITableView的cell高度自动计算。这里不再重复叙述。
其他文章
UITableViewCell如何提前计算高度--含自动计算的原理
根据内容动态计算高度的UITableViewCell--MVVM
四、UITableViewCell的其他优化
五、UITableViewCell的重用机制
1、浅谈Cell的重用
所谓cell重用就是重复利用。大致的工作原理就是:UITableView属于lazy loading,也就是只加载会在界面上显示的部分。举个例子,比如说UITabeview的调试是460,咱们每个Cell的调试是230,这样的话,手机界面上最多就显示两个Cell,当你向上划动,第一个Cell一些离开界面,第三个Cell的一些出现在界面的时候会再创建第三个Cell。注意关键部分到了,再第二个Cell开始离开界面,第四个Cell出现的时候,这时候不会创建第四个Cell,而是直接复用的第一个Cell!也就是说无论你的UITableView里有十条或者三十条数据,只会创建三个Cell来展示这些数据!
总的来说,这种工作机制很合理,无论从CPU和内存的角度考虑都很节省资源,但是这里有一个问题就是:这种机制是用来展示结构一样的数据的!很多时候我们总要实现动态加载,总要有一个Cell,与其它的Cell不同,用来显示“正在加载中”或者“加载更多”之类的东西。这时候在Cell复用的机制下会出现重叠的现象!
重用机制实现了数据和显示的分离,并不会为每个要显示的数据都创建一个Cell,一般情况下只创建屏幕可显示的最大的cell个数+1,每当有一个cell从屏幕消失,就将其放到缓存池中,如果有新的cell出现,就去缓存池中取,如果缓存池中没有,再创建。
这种机制下系统默认有一个可变数组NSMutableArray* visiableCells
, 用来保存当前显示的cell. 还有一个可变字典 NSMutableDictnery* reusableTableCells
, 用来保存可重复利用的cell. 之所以用字典是因为可重用的cell有不止一种样式,我们需要根据它的reuseIdentifier(重用标识符)来查找是否有可重用的该样式的cell.