美文网首页
iOS UITableViewCell

iOS UITableViewCell

作者: dvlproad | 来源:发表于2017-07-13 23:38 被阅读24次

    目录

    • 一、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,一般情况下只创建屏幕可显示的最大的cell个数+1,每当有一个cell从屏幕消失,就将其放到缓存池中,如果有新的cell出现,就去缓存池中取,如果缓存池中没有,再创建。
    这种机制下系统默认有一个可变数组NSMutableArray* visiableCells, 用来保存当前显示的cell. 还有一个可变字典 NSMutableDictnery* reusableTableCells, 用来保存可重复利用的cell. 之所以用字典是因为可重用的cell有不止一种样式,我们需要根据它的reuseIdentifier(重用标识符)来查找是否有可重用的该样式的cell.

    End

    相关文章

      网友评论

          本文标题:iOS UITableViewCell

          本文链接:https://www.haomeiwen.com/subject/qroghxtx.html