1

我在使用 AFNetworking 的 UIImageView 类别加载此 2.8MB 图像时遇到问题。

当我在 iPad mini 上运行该应用程序时,它在能够显示图像之前就崩溃了。我创建了一个示例应用程序,它只执行此操作(加载和显示图像)以查明问题。你可以在这里下载。

有问题的图像:

这是我在仪器上的结果:

图片: http: //www.nasa.gov/images/content/712130main_8246931247_e60f3c09fb_o.jpg (2.8MB)

带有问题图像的应用程序的仪器窗口

使用 Activity Monitor 工具,我得到了这个(看似荒谬的)内存结果:187MB 真实内存/ 535 虚拟内存。

有问题图像的活动监视器工具

工作示例:

以下是来自同一站点的另一个(更大)图像的结果。

图片: http: //www.nasa.gov/sites/default/files/2013-3051.jpg (5MB)

带有 ok 图像的应用程序的 Instruments 窗口

并使用活动监视器:

ok 图像的活动监视器工具

使用模拟器:

在模拟器上,第一张图片并没有使应用程序崩溃,但与工作图片相比,它仍然有一个奇怪的模式:

有问题的图像:

图像有问题的模拟器仪器

工作图像:

图像正常的模拟器仪器

设置细节:

  • 部署目标:6.0
  • Xcode 版本:4.6.3 (4H1503)
  • iPad Mini iOS 版本:6.1.3 (10B329)
  • iPad Mini 可用磁盘空间:13.7GB 容量中的 334MB

我无法弄清楚第一张图片有什么问题,以及为什么它会像那样炸毁内存。我确实注意到它有很多像素(12150×6075),虽然我不知道这是否相关。

4

1 回答 1

1

虽然我认为UIImageView类别AFNetworking相当薄弱,但我认为这里的一些(如果不是大部分)责任在于这些巨大的图像。仅仅因为 JPEG 文件的大小合理,并不意味着生成的位图(因此,可能是生成的UIImage对象)也具有合理的大小。

第一张图像进行了大量压缩,生成的位图至少比原始 JPEG 大一个数量级。第二个 JPEG 也享有不错的压缩,但没有第一个 JPEG 那样引人注目,因此第二个 JPEG 的位图没有第一个大。

在处理这种大小的图像时,您要么让服务器根据屏幕分辨率调整它们的大小,要么采用一些平铺解决方案。不能指望内存有限的设备优雅地处理这些大小的图像。

于 2013-07-30T04:05:42.313 回答