小编Dan*_*ies的帖子

内存警告和崩溃ImageIO-jpeg-data

我已经创建了一个应用程序,它已经准备好了(好吧).

该应用程序基本上是一个儿童闪存卡应用程序,每页有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)

memory objective-c uiimage ipad ios

5
推荐指数
1
解决办法
3371
查看次数

标签 统计

ios ×1

ipad ×1

memory ×1

objective-c ×1

uiimage ×1