iOS 核心绘图与图片内存

在上一次跟踪和分析内存释放问题后,继续优化table的截图内存性能。

按照之前的思路,把多次创建context换成了一次,同时通过CGContext省去了中图和拼接的开销

旧的设计

循环(多个View -> 产生context -> 生成多个Image) -> 产生1个context -> 拼接成1Image

xt改成

产生1个context -> 循环(多个View -> 布局) -> 产生1Image

按照我设计的一个10列1000行超大表格,在旧的设计的情况下,跑到30多行就累积到五六百兆内存无法及时释放被系统关闭,改进后,开销500多找成功完成100行的截图(截图地址JPG 3.8MB, 4812*13200)

但是这也接近极限了

在创建这个画布 UIGraphicsBeginImageContextWithOptions的时候,用掉了224.25MB内存, 另外循环每一行layer.render(in: context)会开销1.6~1.8MB内存( 其他中间复用的cell, header, footer 以及中间用语控制逻辑的临时变量几乎不占内存)。也就是说,按照这样的情况,150左右就是极限,而且很有可能挂掉。

另外UIGraphicsEndImageContext之后,context会被立即释放,省下二百多MB内存,也就是说顺利执行到这里就安全了

results matching ""

    No results matching ""