我在使用AFNetworking的UIImageView类别加载this 2.8MB image时遇到了问题。
当我在iPad mini上运行应用程序时,它会崩溃,然后才能显示图像。我创建了一个示例应用程序,只执行该操作(加载并显示图像)以查明问题。 You can download it here.
以下是我在仪器上的结果:
图片: http://www.nasa.gov/images/content/712130main_8246931247_e60f3c09fb_o.jpg(2.8MB)
使用Activity Monitor工具我得到了这个(看似荒谬的)内存结果: 187MB real mem / 535虚拟内存。
以下是来自同一网站的另一张(更大)图片的结果。
图片: http://www.nasa.gov/sites/default/files/2013-3051.jpg(5MB)
使用活动监视器:
在模拟器上,第一张图片不会使应用程序崩溃,但与工作图像相比,它仍然有一个奇怪的模式:
有问题的形象:
工作图片:
我无法弄清楚第一张图片出了什么问题,以及为什么它会像这样炸毁记忆。我注意到它有很多像素(12150×6075),虽然我不知道这是否相关。
答案 0 :(得分:1)
虽然我认为UIImageView
的{{1}}类别非常弱,但我认为一些(如果不是大多数)责任在于这些巨大的图像。仅仅因为JPEG文件的大小合理,并不意味着生成的位图(因此,可能是生成的AFNetworking
对象)的大小也合理。
第一张图片享受大量压缩,并且生成的位图至少比原始JPEG大一个数量级。第二个JPEG也享有不错的压缩效果,但不像第一个JPEG那样具有戏剧性,因此第二个JPEG的位图没有第一个那样大。
处理此大小的图像时,您要么让服务器调整大小以获得屏幕分辨率,要么使用一些切片解决方案。有限内存的设备不能优雅地处理这些尺寸的图像。