【问题标题】:UIImage takes a lot of memory when loaded from fileUIImage 从文件加载时占用大量内存
【发布时间】:2014-07-20 02:54:51
【问题描述】:

在我的 iPad 应用程序中,我使用 ALAsset 和以下代码从 Photo Stream 加载了 100 张图像:

  ALAsset *asset = [assets objectAtIndex:[sender tag]];
  ALAssetRepresentation *representation = [asset defaultRepresentation];
  UIImage *image = [[UIImage alloc] initWithCGImage:[representation fullScreenImage]
                                                     scale:1.0f
                                               orientation:0];

一切都很完美。但是当我将它作为 JPEG 文件缓存到文件系统,然后使用UIImage *image = [UIImage imageWithContentsOfFile:fullPath] 再次加载它们时,应用程序崩溃并出现内存警告,我可以在分析器中看到它确实使用了大量 RAM。 为什么会这样?

【问题讨论】:

  • 使用@autorelease循环释放内存。
  • 类似于下面的代码: - (void)useALoadOfNumbers { for (int j = 0; j
  • 我现在正在尝试这个。我尝试在不同的地方使用它,但没有成功。
  • 嗯,问题是我没有实际的循环。我知道@autoreleasepool 并尝试以不同的方式使用它。

标签: ios objective-c uiimage memory-warning


【解决方案1】:

一件事,

当您从图库加载图像时,为什么不存储AssetURL,而不是UIImage;这应该会占用更少的空间并提高速度。

当您需要显示时,也许可以使用缩略图表示?

【讨论】:

  • 问题是我必须能够打开这些图像,即使它们已从照片流中删除
  • @flybirdx 那么你应该建立一个数据库并从资产库中复制所有图像。
  • @pawan 我该怎么做?
  • @flybirdx 您可以使用 sqlite 或核心数据来存储图像。
  • @pawan 你认为存储二进制数据会更好吗?
【解决方案2】:

好吧,这是我的错。我发现了问题,结果表明无论如何我都有内存问题。 ALAssetimageWithContentsOfFile 的工作原理完全相同。

现在我将尝试找到减小每个图像大小的方法。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2015-09-17
    • 1970-01-01
    • 1970-01-01
    • 2015-06-26
    • 2014-05-11
    • 2011-02-27
    • 2013-12-13
    相关资源
    最近更新 更多