2016技术笔记

2016笔记——UICollectionView复用

2018-07-27  本文已影响366人  满庭花醉三千客

CollectionView(每行有四个元素,界面显示三行)复用机制:

●●●●

●●●●

●●●●

此时界面需要显示12个cell,一开始前12个cell会创建,则复用池中会添加12个cell,稍微向上滑动一点点,此时第四行出现了,第一行没有完全消失在界面中,所以这4个cell(第13-16个cell)也被直接创建,复用池中总共有16个cell。

如果复用池中,没有cell,则创建cell,如果该cell仍在使用(显示)没有被释放,那么该cell目前不可被取到,所以就会创建16个cell。如果cellA被释放了,则cellA回到复用池中,返回到复用池中的cellA包含所有用户的添加的元素,且元素的tag亦为对应的cellA上的元素tag。

此时如果根据tag值来取视图,自然可以取到cellA中的对应视图元素。

当你构建第17个cell时,会拿取复用池中最后添加的Cell。

来看一下上次的瀑布流的效果图:

Simulator Screen Shot 2016年3月30日 13.16.05.png

进复用池的顺序是由他们的底部离开界面的顺序来决定的:

1先离开,0次之,2最后离开,此时复用池里是这样的:

| 2 |

| 0 |

| 1 |

复用的时候,是先取出,2,然后是0,最后是1,打印看看是不是这样的,测试部分的代码:

屏幕快照 2016-03-30 13.26.04.png

当从复用池中取时,看看cell的文本内容即可明白取得是不是2,0,1:

屏幕快照 2016-03-30 13.29.53.png

发现了吧,第20个就是复用的第2个cell,21复用第0个cell,22复用的是第1个cell。

如果以此类推,是不是接下来复用的顺序是4、3、5呢?

好,看看打印台怎么说:

屏幕快照 2016-03-30 13.33.33.png

凭什么啊?为啥是3、4、5了?

别着急,好好看看collectionView滚动的时候,发生了什么:

Simulator Screen Shot 2016年3月30日 13.32.07.png

明白了没有?

4进入复用池之前,复用池有这么两个cell:

| 3 |

| 5 |

我第四个还没进入复用池呢,此时就要初始化新的cell了,怎么办?从复用池中取啊,就取到3了,此时复用池为:

| 5 |

然后cell4就进入到复用池里了,复用池为:

| 4 |

| 5 |

所以打印的顺序为3,4,5了。

好继续测试,我把4弄高点,让4没进入复用池,但是底部又要创建新的cell了,看看复用顺序是不是3、5、4:

Simulator Screen Shot 2016年3月30日 13.44.39.png

cell4高度调整大了之后,cell4还未进入复用池,复用池为:

| 3 |

| 5 |

第一个复用cell使用的是3。

第二个复用cell使用的是5。

然后是cell4进入复用池,然后创建第三个复用cell时,将会使用4(此时复用池也只有4).

看一下打印台:

屏幕快照 2016-03-30 13.44.20.png

搞定,cell的复用机制,为后进先出。

加油~~

上一篇 下一篇

猜你喜欢

热点阅读