CALayer似乎保留了它的内容 - 如何释放资源?

时间:2013-01-08 17:53:43

标签: ios memory-management core-animation calayer

  

可能重复:
  Can’t release unused CALayer memory when using multiple layers

我有一个应用程序,允许用户浏览一系列CALayers图像。我发现在我向屏幕添加了20多个后,iPad 2会崩溃 - 显然我需要在屏幕上显示时动态加载它们。

所以我通过在不再需要时从其SuperLayer中删除CALayer来实现这一点。然而,我发现在“活动监视器”中查看时内存不会消失。但是当我在模拟器中“模拟内存警告”时它会被释放。你可能会认为这很好 - 这就是内存警告的用途。 em>然而 - 当我浏览图像时,我仍然发现iPad耗尽了RAM,内存使用量一直持续到崩溃。有没有人知道强制CALayer释放其资源的方法?

这是我的代码,请注意,如果我省略分配图层内容,那么内存使用量仍然很低(但当然你看不到图像)

    UIImage* image = [UIImage imageNamed:@"imageName"];

    frontLayer = [CALayer layer];
    frontLayer.bounds = CGRectMake(0, 0, 952, 650);
    frontLayer.contents = (id) image.CGImage;

注意我不使用ARC ,并且在我从其超级层移除图层后,我将其释放(它由属性保留)。内存似乎以低内存警告回收的事实使我认为这不是我保留/释放方式的问题,但我对这些想法持开放态度。

1 个答案:

答案 0 :(得分:1)

我发现这实际上是这篇文章的副本

[UIImage imageNamed:@“”];使用缓存,当我使用[UIImage imageWithContentsOfFile:@“”]时问题就消失了。

Can't release unused CALayer memory when using multiple layers