2016笔记——UICollectionView复用
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。
来看一下上次的瀑布流的效果图:

进复用池的顺序是由他们的底部离开界面的顺序来决定的:
1先离开,0次之,2最后离开,此时复用池里是这样的:
| 2 |
| 0 |
| 1 |
—
复用的时候,是先取出,2,然后是0,最后是1,打印看看是不是这样的,测试部分的代码:

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

发现了吧,第20个就是复用的第2个cell,21复用第0个cell,22复用的是第1个cell。
如果以此类推,是不是接下来复用的顺序是4、3、5呢?
好,看看打印台怎么说:

凭什么啊?为啥是3、4、5了?
别着急,好好看看collectionView滚动的时候,发生了什么:

明白了没有?
4进入复用池之前,复用池有这么两个cell:
| 3 |
| 5 |
—
我第四个还没进入复用池呢,此时就要初始化新的cell了,怎么办?从复用池中取啊,就取到3了,此时复用池为:
| 5 |
—
然后cell4就进入到复用池里了,复用池为:
| 4 |
| 5 |
—
所以打印的顺序为3,4,5了。
好继续测试,我把4弄高点,让4没进入复用池,但是底部又要创建新的cell了,看看复用顺序是不是3、5、4:

cell4高度调整大了之后,cell4还未进入复用池,复用池为:
| 3 |
| 5 |
—
第一个复用cell使用的是3。
第二个复用cell使用的是5。
然后是cell4进入复用池,然后创建第三个复用cell时,将会使用4(此时复用池也只有4).
看一下打印台:

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