【问题标题】:Memory warning level 1 due to UIImage由于 UIImage 的内存警告级别 1
【发布时间】:2010-09-29 05:32:47
【问题描述】:

我正在开发一个需要缩放和旋转图像的组件。以下是组件的流程

从照片库中选择图片 -> 在 UIImageView 中显示该图片 -> 进行缩放 -> 将此图片保存在文档中。

这适用于分辨率较低的图像。

但是一旦我选择了高分辨率的图像,我首先会得到内存警告级别 1。但我无法释放该图像,因为我需要继续使用相同的图像。

我知道图像是按 (width * height * 4) 解包的,所以如果我选择 1800 * 1200 的图像,则消耗的内存为 8.6 MB [还检查了仪器]。

谁能帮我解决这个问题?这会创建 2 个队列

  1. 我们可以使用高分辨率的图像吗?
  2. 2 个带有两个高分辨率图像的 UIImageview 怎么样?

谢谢,

萨加尔

【问题讨论】:

    标签: iphone


    【解决方案1】:

    你可以稍微改变你的操作顺序。

    从照片库中选择图片 -> 缩放图片 -> 将缩放后的图片保存到 Documents 目录 -> 在 UIImageView 中显示缩放后的图片。

    缩放和保存图像需要时间,因此您的用户在看到您的 UIImageView 中的图像之前需要等待一段时间。显示带有取消选项的活动指示器是个好主意。

    我已经在相当大的图像上使用了这种技术,它在旧设备上也能正常工作而不会出现内存警告。

    【讨论】:

    • 另外,请注意自动释放​​池。如果不小心,对象的寿命可能会比预期的长。
    • 感谢机器人的快速回复,但协议是用户将首先选择图像,如果需要,他将使用缩放选项将其缩放以适应全屏。如此挣扎。
    • 我不清楚“缩放以适应全屏”是什么意思。为什么不使用图像选择器的能力来选择图像的一部分呢?或者,如果图像已经比“全屏”大得多,请保存一个缩小到屏幕分辨率的版本并使用它。它仍然会比原来使用更少的内存。
    • rpetrich 是对的。对自动释放的对象非常警惕。如果可能,最好避免使用它们,否则设置自己的自动释放池。
    • 你是对的机器人。 我不清楚“缩放以适应全屏”是什么意思 - 如果我从库中选择较低分辨率的图像并想适应屏幕,这是为了防止。 @rpetrich:是的,需要实现。
    猜你喜欢
    • 2011-04-15
    • 2011-09-12
    • 1970-01-01
    • 1970-01-01
    • 2011-10-28
    • 1970-01-01
    • 1970-01-01
    • 2011-03-23
    • 1970-01-01
    相关资源
    最近更新 更多