gpt4 book ai didi

ios - 核心图形缓存

转载 作者:可可西里 更新时间:2023-11-01 04:54:42 24 4
gpt4 key购买 nike

当使用 [UIImage imageNamed: fileName] 将图像加载到应用中时,系统会缓存图像,因此在再次使用同一图像时会提高性能。

使用 Core Graphics 创建的图像是否有类似的东西?我的意思是使用 UIImage *image = UIGraphicsGetImageFromCurrentImageContext(); 方法从上下文创建的图像。

我目前的方法是绘制图像并将 UIImage 保存到磁盘,这样下次我需要使用相同的绘制方法时,我可以简单地从磁盘加载缓存图像。我正在寻找一种更好的方法来存储 Core Graphics 生成的图像,因为当前的方法似乎很麻烦。

甚至可以将 CGContextRef 和所有绘图存储在一些缓存数据结构中,我不太确定这是否可能?

我的目标是只使用 Core Graphics,这样我的应用程序包就更小了,而且我获得了分辨率独立性,但我想提高性能,因为复杂的绘图例程可能需要很多时间来处理。

更新:在进行了一些性能测试后,这是我的结果。每次平均超过 100 次运行,一次绘制 19 或 25 个不同的 View 。包括 View 、矩形、圆形,以及作为 UILabel 的文本。使用了填充、描边、渐变和阴影。

缓存是按照答案中的讨论实现的,使用 NSDictionary 存储 UIImage 对象。每次运行都有一个单独的缓存,在运行中使用,但不是用于所有 View (在 25 个 View 中,有 2 组 8 个,19 个中有 2 组 6 个,它们是相同的并且可以缓存)。

时间如下:iOS 模拟器

19 次浏览

无缓存 - 平均运行 11.667 毫秒

缓存 - 平均运行 10.321 毫秒

25 次浏览

无缓存 - 平均运行 14.304 毫秒

缓存 - 平均运行 13.509 毫秒

设备

19 次浏览

无缓存 - 平均 82.785 毫秒缓存 - 平均 77.831 毫秒

25 次浏览

无缓存 - 平均 107.977 毫秒缓存 - 平均 100.094 毫秒

第一次(保存到缓存)的时间和使用缓存仍然有益的时间之间存在显着差异(将近 8%)。

最佳答案

我没有性能数据来支持这一点,但我认为使用 imageNamed 时的 UIImage 缓存是为了保存从“磁盘”读取文件并将 png 或其他任何内容转换为 UIImage 数据。

因此,您写入磁盘的方法似乎是一个不必要的步骤 - 一旦您拥有 UIImage 对象,它就会像您将要获得的那样得到优化。

您可以考虑像图像“工厂”单例这样的东西,它根据请求懒惰地创建图像 - 所以第一次,它会执行必要的核心图形操作来创建 UIImage,然后返回完成的对象。每个不同的图像都将作为 ivar 存储在您的工厂中。

关于ios - 核心图形缓存,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8195747/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com