ios - 大 (UI) 图像内存管理

标签 ios objective-c image ipad memory

我正在开发一款仅支持 iPad 的 iOS 应用程序,该应用程序实质上是从 Dropbox 下载大型、高质量图像 (JPEG),并在 UIScrollView 和 UIImageView 中显示所选图像,从而允许用户缩放和平移图像。

该应用程序主要用于向有兴趣购买相框照片的潜在客户展示图像。它的工作方式是首先显示图像,缩放和平移以显示潜在客户(如果他们喜欢图像)。如果他们喜欢,他们可以决定是否要裁剪特定区域(同时保持特定的纵横比/大小),然后将最终图像(裁剪或不裁剪)作为电子邮件附件发送到生产。

我现在一直面临的问题是,即使该应用程序只能在新 iPad 上运行(即更多内存等),我无法找到处理方法图像,以便应用不会收到内存警告然后崩溃

大多数图像的大小为 4256x2832,这使每个图像的内存使用量至少达到 40MB。虽然我一次只显示一个图像,但图像裁剪(这是目前的主要内存/崩溃问题)正在创建一个新的裁剪图像,这反过来又会暂时将应用程序的总 RAM 使用量提高到大约 120MB,导致崩溃。

简而言之:我正在寻找一种方法来管理非常大的图像,能够裁剪它们并且在裁剪后仍有足够的内存来将它们作为电子邮件附件发送。

我一直在考虑实现一个单例图像管理器,所有 View 都将使用它,并且一次只包含一个大图像,但我不确定这是否是正确的方法,或者即使无论如何都会有帮助的。

最佳答案

解决此问题的一种方法是平铺图像。您可以将大的解压缩图像作为一系列图 block 保存到“磁盘”中,并且当用户平移时,仅拉出您需要实际显示的图 block 。您一次只需要内存中的 1 个图 block ,因为您将其绘制到屏幕上,然后将其丢弃并加载下一个图 block 。 (您可能希望将可见图 block 缓存在内存中,但这是一个实现细节。即使将整个图像作为图 block 也可以减轻内存压力,因为您不需要一个大的连续 block 。)这就是 Photoshop 等应用程序的处理方式遇到这种情况。

关于ios - 大 (UI) 图像内存管理,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/20220057/

相关文章:

iphone - 卡在 NSManagedObjectContext 的保存 :

objective-c - UIPopoverController 在 iOS 8 中无法正确调整大小

javascript - 在 javaScript 中给定时间后图像没有改变

ios - 在没有 Apple 开发者订阅的情况下如何在我的 iPod 中测试我的应用程序

ios - 通过 Xcode 关闭模拟用户位置

ios - audioSession 错误 : The operation couldn’t be completed.(OSStatus 错误 -50。)

ios - 如何在 iOS 的头文件中创建 CGSize 类型的常量?

iphone - 有没有办法让 Round Rect 按钮拍摄完全相同大小的图像?

html - 如何更改图像的灰度滤镜中的自定义颜色?

java - 检查jsp中是否存在图像