克隆UIImage iOS的部分时的内存问题

时间:2013-07-11 16:32:28

标签: ios xcode memory-management uiimageview uiimage

我正在开发一个应用程序,可以将图像的各个部分复制到该图像的其他部分。复制的逻辑很好,但是当我想提供撤消功能时,我遇到了问题。

当前的解决方案是保存最多5个UIImages的数组,并使用堆栈中的倒数第二个对象进行恢复。使用非常大的图像时,这会导致各种内存问题。例如,该阵列中可能有5个5MB的图像。

这是我目前的两个想法。

  1. 不是保存包含所有更改的全新图像,而是仅保存像Photoshop中的图层所做的更改。我可以将5层叠在一起,当我用完图层时,合并底部的两层并创建一个新图层。如果用户在一个图层上复制整个图像,我可能仍会遇到问题。这不太可能。

  2. 像我一样保存整个图像,但将其保存到文件系统中。这将保持内存空闲,但我不确定设备能够持续保存5MB图像的强度。我会将其限制为保存5张图像。

  3. 任何其他想法或为什么两者中的一个会优于另一个?

2 个答案:

答案 0 :(得分:2)

我会考虑通过存储信息来编辑图像来实现Command Pattern的选项。当需要显示图像时,可以通过处理当前命令在那时生成图像。最多,您可以在任何给定时间将原始图像和编辑后的版本存储在内存中。

这也有助于解决“撤消”问题,因为您现在可以从数组中删除命令项。

答案 1 :(得分:1)

由于尺寸和内存限制,我将使用以下方式访问图像:

NSString *fileLocation = [[NSBundle mainBundle] pathForResource:fileName ofType:extension];
NSData *imageData = [NSData dataWithContentsOfFile:fileLocation];

[UIImage imageWithData:imageData];

这应该用于将图像保存到文件系统,以根据需要减少内存使用量。

确保已启用ARC!你想要自动发布未使用的对象。