6

我的一个应用程序出现内存问题,我已将 Instruments> Activity monitor 中定义的“真实内存”确定为可能的罪魁祸首。

我的应用程序在 UIScrollViews 分配大的 UIImages。有一个 CIImageFilter 应用于其中一个图像。活动监视器显示,在第一次推送包含带有大图像的滚动视图的视图控制器时,实际内存使用量跃升至 300mb 左右。随后的推送/弹出将其提高到大约 500mb:

我读到“实时字节”不计算纹理和 CALayers 使用的内存,所以我的问题是:如何正确释放我的 Image/Scrollviews 的 CALayers 使用的内存?

见右侧真实内存使用蓝色饼图:

在此处输入图像描述

此进程的真实内存和虚拟内存都是最高的:

在此处输入图像描述

困扰我的是,当弹出该控制器时,我试图清理我的大滚动视图和图像,“实时字节”的数字下降到大约 5mb,而“真实内存”保持高得离谱(~500 mb) :

ContainerScrollView* container = ...;
[container.view removeFromSuperview];
container.view = nil;

这是分配分析: 在此处输入图像描述

4

1 回答 1

1

我发现一个人在这里遇到了类似的问题:

使用 ARC 的神秘 CoreImage 内存泄漏

答案(我真的希望如此)似乎开始使用NSData dataWithContentsOfFile: 然后创建一个UIImage imageWithData:. 有用户选择的图像吗?将其写入临时文件并读回。我不相信任何其他图像方法,因为在我 12 小时的测试中,它们在 iOS 6.1.2 中对于大图像视图的行为似乎不合理。

于 2013-04-04T04:28:14.777 回答