接上文[WWDC2018] ——深入解析iOS内存/iOS Memory Deep Dive(一)。
三、Tools For Profiling Footprint
讲了instruments的一些使用,有一些技巧和新特性,我并不是很关注这个,本文会跳过这一节,有兴趣的人可以自行查看。
四、Images
图片渲染格式
SRGB format : 每个通道2个byte,每个像素4个byte,分别表示红、绿、蓝、透明度通道。
Wide format : 每个通道2个byte,每个像素8个byte。支持更宽的色域,但占用内存更多,使用需谨慎。
Luminance and alpha 8 format : 每个像素8个byte,分别表示灰度和透明度,适用于 Metal APP中的阴影,通常的APP中很少用到。
Alpha 8 format : 每个像素1个byte,单色。适用于蒙层、无emoji的文字等。
通常的图片,都是使用SRGB进行渲染,也就是老生常谈的图片尺寸*4,才是图片使用的真正内存。
推荐使用iOS10引入的新API,UIGraphicsImageRenderer,可以在iOS12中自动选择合适的format,这个在做一些基础图形渲染时比较有用,比如贝塞尔曲线绘制,阴影绘制等。
图像下采样(Downsampling)
使用imageIO进行图像降低采样,可以有效的减小图片内存。这个问题和我在自己的图片优化文章中有提到过。图像降低采样优化,在LKImageKit中有,在SDWebImage中则没有。
五、Optimizing when in background
在APP进入后台时的一些推荐操作:
1.通过APP的生命周期,如 forground, background等事件
2.通过页面的生命周期,如 viewWillAppear, wiewDidLoad等事件
当页面在后台时,卸载图片资源,在页面进入前台时,加载图片资源。那么为什么要这么做呢。这个是在iOS生态下,各APP间互惠互利的一个行为,后台APP使用更少的资源,就能更好的提升前台应用的体验。退一步说,APP进入后台后,使用更少的内存,也可以减少后台OOM。虽然现在国内的企业几乎不关注后台OOM,但是其实对于用户来说,后台进程被杀也是一个相当糟糕的用户体验。
六、Demo演示
略
七、总结
总体而论,是一个很好的session,对iOS内存不怎么了解的同学可以从这个session中学到很多有用的东西。但是除了一些新的feature,几个苹果工程师讲解的iOS内存相关的问题,做过几年iOS开发都是会知道的。
而我个人比较期待的是:
Memory Footprint Limit 各设备的技术公式或者准确值(这个有民间的统计数据,但是并没有官方的指导值)。
Memory Footprint Limit 和Memory Warning的关系,也即是Memory Footprint值在什么情况下回触发内存警告,以及OOM(同样的,这个有民间的统计数据,但是并没有官方的指导值)。
Memory Warning的其他影响因素。session中只说了可优化的在Memory Footprint,但是实际上内存警告应该不止Memory Footprint单一约束条件。