iOS如何存储从压缩数据(jpeg2000,png,jpg等)加载的图像
例: [UIImage imageWithData:pngData]
它是在内部存储实际编码的字节并按需解压缩,还是永久解压缩为原始像素或其他格式?
我正在测试连接到Xcode 5.1.1的运行iOS 7.1的iPhone 4.我不明白为什么我得到内存警告甚至崩溃当乐器显示我的应用程序只使用几兆字节并且有足够的内存空闲(见附件).有任何想法吗?

更新:
在仪器中,我怀疑,我发现没有泄漏,但"匿名VM"大小似乎过大,并充满了图像数据.我的应用中的每个表格单元格都显示JPEG.也许我应该预先缩放这些图像,这是大型匿名VM大小的原因...更多的调查要做.

我已经创建了一个应用程序,它已经准备好了(好吧).
该应用程序基本上是一个儿童闪存卡应用程序,每页有12张卡.
它目前仅适用于iPad,当触摸卡片时,图像视图会以全分辨率2048 x 1536从卡片中全屏显示,并播放动物的声音,您可以点击全尺寸图像,然后返回卡.每张卡都分配了5张图像.该应用程序在设计期间一直工作得很好,现在我已经加载了所有的动物,我一直在测试它,并注意到它崩溃了.
长话短说,内存不断增长每个图像12MB(尽管每个图像大约200-400KB),直到达到700MB的内存并崩溃.这种记忆永远不会减少
我已经通过xcode工具运行应用程序并且可以看到没有泄漏但是在"分配"中已经确定它是'ImageIO-jpeg-data'类别是罪魁祸首.
我整晚都在阅读这篇文章,因为我发现了一些有希望的结果,但是这些结果对我没有用,所以我假设我误解了所建议的内容或者我没有理解,所以希望有人可以帮助我以外行的方式解释或解释我如何解决这个问题.
好的,以便解释我如何设置视图控制器.
最初我为阵列中的每张卡设置了5张图像,但有一段延迟,所以有人在这里建议我在viewDidLoad中预加载图像,然后在触摸卡/按钮时调用它们.
例如,我在viewDidLoad中使用了这种格式
domestic100 = [UIImage imageNamed:@"ferret-00"];
domestic101 = [UIImage imageNamed:@"ferret-01"];
domestic102 = [UIImage imageNamed:@"ferret-02"];
domestic103 = [UIImage imageNamed:@"ferret-03"];
domestic104 = [UIImage imageNamed:@"ferret-04"];
Run Code Online (Sandbox Code Playgroud)
然后在按下的按钮中,我通过调用将图像分配给图像视图:
domestic01ImageContainer.image = domestic100;
Run Code Online (Sandbox Code Playgroud)
在if else中查看图像编号是否为1到4.
无论如何它完美地工作(除了这个记忆问题)
我在网上看过,我最好宣布使用uiimages
[UIImage imageWithContentsOfFile:path]
Run Code Online (Sandbox Code Playgroud)
如本文所示: UIImage内存不能解除分配VM:ImageIO_JPEG_DATA?
所以我在代码中做的改动是:
在我的viewDidLoad中,我现在创建uiimages:
domestic200 = [UIImage imageWithContentsOfFile: [[NSBundle mainBundle] pathForResource: @"dog-00" ofType: @"jpg"]];
domestic201 = [UIImage imageWithContentsOfFile: [[NSBundle mainBundle] pathForResource: @"dog-01" ofType: @"jpg"]];
domestic202 = [UIImage imageWithContentsOfFile: [[NSBundle mainBundle] pathForResource: @"dog-02" ofType: @"jpg"]];
domestic203 = [UIImage imageWithContentsOfFile: [[NSBundle …Run Code Online (Sandbox Code Playgroud)