使用
对于使用Core Graphics创建的图像是否有类似的方法呢?我指的是使用
我目前的做法是绘制图像并将UIImage保存到磁盘中,以便下一次需要使用相同的绘制方法时,只需从磁盘加载缓存的图像。我正在寻找一种更好的方法来存储Core Graphics生成的图像,因为当前的方法似乎很麻烦。
也许甚至可以将带有所有绘图信息的CGContextRef存储在某些缓存数据结构中,但我不确定是否可能?
我的目标是仅使用Core Graphics,这样我的应用程序包会更小,并且我可以获得分辨率独立性,但我想改进性能,因为复杂的绘图例程可能需要很长时间来处理。
更新:进行了一些性能测试后,以下是我的结果。每次运行都是100次的平均值,每次绘制19或25个不同的视图。视图包括矩形、圆形,但也包括文本作为UILabels。填充、描边、渐变和阴影都被使用了。
如讨论中所述,实现了缓存,使用NSDictionary存储UIImage对象。每个运行都有一个单独的缓存,用于该运行,但不用于所有视图(在25个视图中,有2组8个和2组6个在19个视图中是相同的,可以被缓存)。
以下是时间:
iOS模拟器
19个视图
没有缓存-平均运行11.667毫秒
缓存-平均运行10.321毫秒
25个视图
没有缓存-平均运行14.304毫秒
缓存-平均运行13.509毫秒
设备
19个视图
没有缓存-平均82.785毫秒
缓存-平均77.831毫秒
25个视图
没有缓存-平均107.977毫秒
缓存-平均100.094毫秒
时差很明显(将近8%),考虑到较长的第一次(保存到缓存),仍然有利于使用缓存。
[UIImage imageNamed: fileName]
向应用程序加载图像时,系统会缓存图像,因此当再次使用相同的图像时会提高性能。对于使用Core Graphics创建的图像是否有类似的方法呢?我指的是使用
UIImage *image = UIGraphicsGetImageFromCurrentImageContext();
方法从上下文中创建的图像。我目前的做法是绘制图像并将UIImage保存到磁盘中,以便下一次需要使用相同的绘制方法时,只需从磁盘加载缓存的图像。我正在寻找一种更好的方法来存储Core Graphics生成的图像,因为当前的方法似乎很麻烦。
也许甚至可以将带有所有绘图信息的CGContextRef存储在某些缓存数据结构中,但我不确定是否可能?
我的目标是仅使用Core Graphics,这样我的应用程序包会更小,并且我可以获得分辨率独立性,但我想改进性能,因为复杂的绘图例程可能需要很长时间来处理。
更新:进行了一些性能测试后,以下是我的结果。每次运行都是100次的平均值,每次绘制19或25个不同的视图。视图包括矩形、圆形,但也包括文本作为UILabels。填充、描边、渐变和阴影都被使用了。
如讨论中所述,实现了缓存,使用NSDictionary存储UIImage对象。每个运行都有一个单独的缓存,用于该运行,但不用于所有视图(在25个视图中,有2组8个和2组6个在19个视图中是相同的,可以被缓存)。
以下是时间:
iOS模拟器
19个视图
没有缓存-平均运行11.667毫秒
缓存-平均运行10.321毫秒
25个视图
没有缓存-平均运行14.304毫秒
缓存-平均运行13.509毫秒
设备
19个视图
没有缓存-平均82.785毫秒
缓存-平均77.831毫秒
25个视图
没有缓存-平均107.977毫秒
缓存-平均100.094毫秒
时差很明显(将近8%),考虑到较长的第一次(保存到缓存),仍然有利于使用缓存。