【问题标题】:(iphone) loading png to UIImage takes up more memory than png binary size?(iphone) 加载 png 到 UIImage 占用比 png 二进制大小更多的内存?
【发布时间】:2011-01-05 23:31:33
【问题描述】:

我正在加载 100 个 4k-8k png 文件(768*768 分辨率),总共不到 1mg。

虽然我确实将它们转换为 UIImage 并偶尔调整/合并图像,
由于图像加载导致内存警告,我很惊讶地看到 ipad 设备死机。

转换为 UIImage 占用的内存是否比文件的实际字节大小多得多?

谢谢。

【问题讨论】:

    标签: iphone png uiimage


    【解决方案1】:

    这是因为 png 被解压到内存中,占用了更多内存。并且每张解压后的图片最多会占用 768*768*4 = 2.25 MByte 的内存。

    【讨论】:

    • 啊..巨大的差异..有没有办法告诉(大约)给定的 png 在解压缩时会占用多少内存?
    • 是的 - 宽度 x 高度 x 4 为您提供以字节为单位的大小 - 对于任何解压缩的图像格式,公式都是相同的,因为每个像素都是 4 个字节大。
    • 啊,压缩的 png 文件大小是 4k 还是 40k 无关紧要?会被解压到宽*高*4?另外,就文件大小而言,在解压缩时 png 是否被 pngcrushed(如苹果的 xcode 那样)并不重要?
    • 不,因为当它加载到内存中时,它是未压缩的。如果您知道 PNG 不包含 alpha 通道数据,则可以节省一些空间 - 那么您可能会将其存储为 RGB 而不是 RGBA。不过我还没试过。
    • 我认为,该图像本身只需要 320x320x4,但是一些额外的内存将占用放置图像的视图(即 UIImageView)用于画布。
    【解决方案2】:

    如果图片并非全部用于同时显示,您可能需要考虑如何加载图片。这里和其他地方有很多关于此的主题,例如this thread

    UIImage imageNamed 会缓存图片(有时 Apple 的缓存有点问题,没有正确释放)而UIImage imageWithData 不会,所以一旦不再显示,内存就会被释放。根据您的情况,两者都有优点和缺点,因此请尽量了解差异。

    【讨论】:

    • 谢谢,我实际上是使用 UIImage imageWithData 从 sqlite 加载它们的。不过,我会立即加载它们。正如你所说,我可能需要重新考虑如何保留/丢弃图像
    猜你喜欢
    • 1970-01-01
    • 2011-03-23
    • 2015-05-16
    • 2012-02-14
    • 2014-07-20
    • 1970-01-01
    • 1970-01-01
    • 2012-08-29
    • 2020-09-25
    相关资源
    最近更新 更多