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


如果这个时候当你用iOS 10编译出你的app,那么非常顺滑的用户体验就会自动的优化出来 。
的流畅的滑动解决了,那么在在加载的时候所花费的时间,怎么解决呢??
加载的时间取决于 。很可能回去加载图片,来自于网络或者来自于本地的数据库 。这些操作大多数都是异步的操作 。为了使data加载更快,iOS 10引入了新的API来解决这个问题 。
有2个“小伙伴”,那就是data 和 。在iOS 10中,将会迎来第3个“小伙伴” 。这个“小伙伴”叫 。
1
2
3
4
5
6
7
8
9
10
ching{
(:,
Paths:[])
(:,
:[])
}
w:{
weak var :?
var :Bool
}
这个协议里面只有一个必须要实现的方法——。这个方法会在里面被调用,用来给你异步的预加载数据的 。数组是有序的,就是接下来item接收数据的顺序,让我们model异步处理数据更加方便 。

【WWDC2016 Session笔记】 iOS 10 UICollection

文章插图
在这个协议里面还有第二个方法,不过这个方法是的 。我们可以利用这个方法来处理在滑动中取消或者降低提前加载数据的优先级 。
值得说明的是,新增加的这个“小伙伴”并不能代替原来的读取数据的方法,这个预加载仅仅只是辅助加载数据,并不能
删除原来我们读取数据的方法 。
至此,我们来看看从文章开始到现在,的性能提升了多少 。我们还是用掉帧的方法来看看的性能 。
上图是iOS 9 的性能,很明显的看见,波峰波谷很明显,并且还掉了8帧,有明显的卡顿现象 。
上图是iOS 10 的性能,我们可以很明显的看到,经过iOS 10的优化,整个曲线很明显平缓了一些,没有极端的波峰掉帧现象 。但是依旧存在少量的波峰快到16ms分界线了 。
上图是iOS 10 + Pre- API 之后的性能,已经优化的效果很明显了!整条曲线基本都水平了 。近乎完美 。但是还是能发现有个别波峰特别高 。波峰特别高的地方就是那个cell加载压力大,时间花的比较长导致的 。接下来我们继续优化!
先来总结一下使用Pre- API需要注意的地方 。
综上所述,Pre- API对于提高的性能提升是很有帮助的,而且并不需要加入太多的代码 。加入少量的代码就可以获得巨大的性能提升!
三. 的Pre-预加载
在iOS 10中,也跟着一起得到了性能的提升,一样拥有了Pre- API 。
1
2
3
4
5
6
7
8
{
(:,aths:[])
w(:,:
[])
}
:{
weak var :?
}
这里和上面 一样,会调用方法 。还是一个有序数字,顺序就是列表上可见的顺序 。第二个可选的API还是,和之前提到的一样,也是用来取消预加载的 。性能的提升和一样的,对的性能提升很大!
四. 针对self-的改进
self- API 第一次被引入是在iOS 8,然而现在在iOS 10中得到了一些改进 。
在 中有一个固定的类,叫,iOS已经在这个类中完全支持了self- 。为了能开启这一特性,需要我们开发者为一些不能为0的的cell设置一下 item size 。
1
.=(width:50,:50)
这会告诉我们想要开启动态计算内容的布局 。
至今,我们能有3种方法来动态的布局:
所以想指定cell的大小,就可以用上面3个方法之一 。
但是实际操作中,我们可以发现,有时候设置一个合适的 item size,对于我们来说是很困难的事情 。如果flow 可以用数学的方法动态的计算布局,而不是根据我们给的size去布局,那会是件很酷的事情 。
iOS 10中就引入了新的API来解决上述的问题 。