先介绍一下iOS的cell重用机制,然后对比ListView的item"重用"机制.
iOS的TableViewCell重用机制
- 通过对每一个类型的cell绑定重用id标志
- 根据重用id去取出重用池里面的cell对象,池子里没有或者数量不够,
tableView
会new一个新的出来. - 去更新该cell,调整frame并移动到可视区域.
ListView的item"重用"机制
ListView
因为没有item的重用id,所以每次滑动ListView
,它会重新创建、布局、绘制可见区域内的item,一般会多绘制可见区域以外2-4个item,即预加载机制,这点跟iOS有点类似.当item不在屏幕显示的时候,会执行dispose
.
Flutter整个框架对UI进行了优化,所以不必担心重复创建item的内存消耗问题.ListView
的重用机制就是Flutter对UI的重用机制,优化更加彻底,会重用item对应的element和renderObject对象,因为item对象每次都会重新创建.item对象是轻量级的,它关联的renderObject和element才是正在消耗内存的,只要这两个有缓存机制就没什么大问题.而且ListView
必须滚动到指定位置之后才会触发相关区域item的创建、布局等操作.