iPad iOS内存管理 - 如何释放UIImageViews,UIScrollViews使用的“真实内存”?

时间:2013-04-02 18:21:52

标签: objective-c ipad memory-management ios6 calayer

我的某个应用程序存在内存问题,并且我已经确定了“实际内存”,如“仪器”中所定义。活动监测可能是罪魁祸首。

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

我读到“Live Bytes”不计算纹理和CALayers使用的内存,所以我的问题是:如何正确释放我的图像/滚动浏览的CALayers使用的内存? < / p>

请参阅右侧的实际内存使用情况蓝色饼图:

enter image description here

实际和虚拟内存都是此过程中最高的:

enter image description here

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

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

以下是分配分析: enter image description here

1 个答案:

答案 0 :(得分:1)

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

Mysterious CoreImage memory leak using ARC

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