【WWDC2016 Session笔记】 iOS 10 UICollection( 二 )


这个时候我们把这个cell从reuse队列里面拿出来,然后调用方法 。这个方法就给了cell时间,用来重置cell,重置状态,刷新cell,加载新的数据 。
再滑动,我们就会调用th方法了 。这个方法里面就是我们开发者自定义的填充cell的方式了 。这里会填充data model,然后赋值给cell,再把cell返回给iOS系统 。
当cell马上要进入屏幕的时候,就会调用的方法 。这个方法给了我们app最后一次机会,为cell进入屏幕做最后的准备工作 。执行完之后,cell就进入屏幕了 。
当cell完全离开屏幕之后,就会调用方法 。以上就是在iOS10之前的整个的生命周期 。
接下来我们就来看看iOS 10的生命周期是怎么样的 。
这里还是和iOS9一样的,当用户滑动的时候,需要一个cell,我们就从reuse队列里面拿出一个cell,并调用方法 。注意调用这个方法的时间,当cell还没有进入屏幕的时候,就已经提前调用这个方法了 。注意对比和iOS 9的区别,iOS 9 是在cell上边缘马上进入屏幕的时候才调用方法,而这里,cell整个生命周期都被提前了,提前到cell还在设备外面的时候 。
这里还是和之前一样,在th中创建cell,填充数据,刷新状态等等操作 。注意,这里生命周期也比iOS 9提前了 。
用户继续滑动,这个时候就有不同了!
这个时候我们并不去调用方法了!这里遵循的原则是,何时去显示,何时再去调用 。

【WWDC2016 Session笔记】 iOS 10 UICollection

文章插图
当cell要马上就需要显示的时候,我们再调用方法 。
当整个cell要从的可见区域消失的时候,这个时候会调用方法 。接下来发生的事情和iOS9一样,cell会进入重用队列中 。
如果用户想要显示某个cell,在iOS 9 当中,cell只能从重用队列里面取出,再次走一遍生命周期 。并调用th去创建或者生成一个cell 。
在iOS 10 当中,系统会把cell保持一段时间 。在iOS中,如果用户把cell滑出屏幕后,如果突然又想回来,这个时候cell并不需要再走一段的生命周期了 。只需要直接调用就可以了 。cell就又会重新出现在屏幕中 。这就是iOS 10 的整个的生命周期 。
上面说的iOS 10里面的场景同样适用于多列的情况 。这时我们每次只加载一个cell,而不是每次加载一行的cell 。当第一个cell准备好之后再叫第二个cell准备 。当2个cell都准备好了之后,接着我们再调用给每个cell,发送完这个消息之后,cell就会出现在屏幕上了 。
这虽然看起来是一个很小的改动,但是这小小的改动就提升了很多的用户体验!
让我们来看看上述的改动对滑动的影响
滑动比iOS 9流程很多,这里可以看到整个过程都很平缓,不卡顿 。
还是和iOS 9一样,我们来模拟一下系统是如何加载cell的情况 。
我们可以很明显的看到,iOS 系统是一个个的加载cell的,一个cell加载完之后再去加载下一个cell 。这里和iOS 9 的有很大的不同,iOS 9是加载整整一行的cell 。
这是因为我们用了新的 的生命周期 。整个app完全没有加一行代码 。现在iOS 10是丝滑的滑动体验实在是太棒了!!
二. 的Pre-预加载
当我们编译iOS 10的app的时候,这个Pre-默认是的 。当然,如果有一些原因导致你必须用到iOS 10之前老的生命周期,你只需要给加入新的属性即可 。如果你不想用到Pre-,那么把这个属性变成false即可 。
1
.= false
为了最佳实践一下这个新特性 。我们先改变一下我们加载cell的方式 。我们把很重的读取数据的操作,所有内容的创建都放到th方法里面去完成 。保证我们在 和 这两个方法里面基本不做其他事情 。最后,保证th加载的cell都不是从重用队列里面拿出来的 。