使用多个图层时无法释放未使用的CALayer内存

Uli*_*ile 3 memory-management objective-c instruments calayer uiimage

我在我的应用程序中使用多个CALayer,其中包含大型UIImage作为内容.不幸的是,当我不需要图层和图像时 - 内存不会被释放.

我用来创建图层的代码是:

UIImage *im = [UIImage imageNamed:@"image_1.jpg"];
CALayer * l = [CALayer layer];
[l setBounds:CGRectMake(0, 0, 1024, 768)];
[l setPosition:CGPointMake(512, 384)];
[l setAnchorPoint:CGPointMake(0.5, 0.5)];
[l setHidden:NO];
[l setContents:(id) im.CGImage];
[self.layer addSublayer:l]; // self is a subclass of UIView
[self.tmpArr addObject:l]; // self.tmpArr contains the layers I am using (one in this example)
Run Code Online (Sandbox Code Playgroud)

我用来释放图层的代码,它的内容是:

CALayer * l = [self.tmpArr objectAtIndex:i];
[l removeFromSuperlayer];
[l setHidden:YES];
[l setContents:nil];
[self.tmpArr removeAllObjects];
Run Code Online (Sandbox Code Playgroud)

当我使用仪器内存分析器时,我看到实际内存在创建图层时会增加,但在释放时不会减少.因为我使用ARC,所以无法使用发行版.我在这做错了什么?

谢谢.

Nik*_*uhe 6

UIImage的imageNamed:方法使用静态缓存,只在紧张的内存情况下才会释放.

你的选择是:

  1. -[UIImage imageWithContentsOfFile:]改用.
  2. 忽略这个问题.当存储器通知进入时,清理缓存.