可能重复:
使用多层时无法释放未使用的 CALayer 内存
我有一个应用程序,它允许用户浏览一系列 CALayers 图像。我发现在屏幕上添加超过 20 个后,iPad 2 会崩溃 - 显然我需要在屏幕上可见时动态加载它们。
因此,我通过在不再需要时从其 SuperLayer 中删除 CALayer 来实现这一点。然而,我发现在“活动监视器”中查看时内存并没有消失。但是,当我在模拟器中“模拟内存警告”时,它确实会被释放。你可能会想 - 这就是内存警告的用途。但是- 当我浏览图像时,我仍然发现 iPad 内存不足,内存使用量不断上升直到崩溃。有谁知道强制 CALayer 释放其资源的方法?
这是我的代码,请注意,如果我省略分配图层内容,那么内存使用率仍然很低(但当然你看不到图像)
UIImage* image = [UIImage imageNamed:@"imageName"];
frontLayer = [CALayer layer];
frontLayer.bounds = CGRectMake(0, 0, 952, 650);
frontLayer.contents = (id) image.CGImage;
注意我没有使用 ARC,在我从它的超层中删除该层后,我释放它(它由一个属性保留)。内存似乎被低内存警告回收的事实让我认为这不是我保留/释放方式的问题,但我对想法持开放态度。