知识卡片
列表控件靠回收复用单元格换取性能
内容
一个可能有上千行数据的列表,如果为每一行都创建一个独立的单元格视图对象,内存和创建开销会随数据量线性增长;实际做法是屏幕上能看到多少行就只创建、保留多少个单元格视图,滑出屏幕的单元格不会被销毁,而是被丢进一个回收队列,等新的一行滑入屏幕需要显示时,直接从队列里取出一个旧的单元格对象,把新数据填进去重新使用,而不是重新创建。取用哪种回收单元格靠预先定义好的模板标识符区分(同一个列表可能有几种不同布局的单元格模板)。这是”对象池”这个通用性能优化思路在滚动列表场景下的具体应用:用”复用+重新赋值”替代”频繁创建+销毁”,把内存开销和创建开销都限制在屏幕可见范围内,与列表数据总量无关。
参考来源
《Swift全解析:新式iOS实战开发》第22章《初级》