【iOS】自定义cell及其复用机制( 二 )


四、cell的复用原理
在讲解复用原理前我们需要先认识一下cell复用的三个容器
是继承自,其最核心的思想就是的复用机制 。初始化的时候他会先创建cell的缓存字典和的缓存array,以及一个用于存放复用cell的(可变的集合) 。其中我们说的复用池实际上就是

在滚动过程中会通过复用机制来管理单元格对象,避免频繁地创建和销毁单元格,提高性能和内存利用率 。当某个单元格离开屏幕范围时,它会被回收并放入集合中,等待被重复使用 。当新的单元格需要显示时,会首先尝试从中获取一个可复用的单元格对象,如果中没有可用的单元格,则会通过实例化新的对象来满足需求 。
在表视图显示的时候,会创建
(视图中可看的单元格个数+1)个单元格,一旦单元格因为滑动的而消失在我们的视野中的时候,消失的单元格就会进入缓存池(或叫复用池),当有新的单元格需要显示的时候,会先从缓存池中取可用的单元格,获取成功则使用获取到的单元格,获取失败则重新创建心的单元格,这就是整个的复用机制 。但是如何进行复用,这里有两种方式:
接下来介绍一下实现的基本流程:
初始化:初始化cell单元格的一些基本属性与创建装载cell的容器
于是下一步便是(布局我们的子视图)
- (void)layoutSubviews{_backgroundView.frame = self.bounds;[self _reloadDataIfNeeded];[self _layoutTableView];[super layoutSubviews];}
通过的一系列操作对cell进行布局
五、自定义cell
我们的具有原生的控件,内部有一个默认的子视图 ,其作为父视图,有三个对应的子视图:、、 。而我们需要用属性去决定用哪个子视图(对应属性以及在中的位置) 。其结构图如下:
但在实际app应用中这样的布局并不能满足我们的设计需要,因此我们就需要创建一个自定义类来符合我们的想法,接下来给出一个自定义cell的例子:
参考博客:
对的复用机制原理以及理解
复用 Cell 的两种方式区别
总结
【【iOS】自定义cell及其复用机制】本文简要介绍了cell的注册与非注册的复用方式以及区别和cell复用的原理,在后面如果有新的理解了会加以补充