Nicht verwendeter CALayer-Speicher kann nicht freigegeben werden, wenn mehrere Layer verwendet werden

Ich verwende mehrere CALayer in meiner Anwendung mit großem UIImage als Inhalt. Leider wird der Speicher nicht freigegeben, wenn ich weder die Ebene noch das Bild benötige.

Der Code, den ich zum Erstellen der Ebene verwende, lautet:

<code>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)
</code>

Der Code, den ich verwende, um die Ebene und ihren Inhalt freizugeben, lautet:

<code>CALayer * l = [self.tmpArr objectAtIndex:i];
[l removeFromSuperlayer];
[l setHidden:YES];
[l setContents:nil];
[self.tmpArr removeAllObjects];
</code>

Wenn ich den Instrumentenspeicher-Profiler verwende, wird der reale Speicher beim Erstellen der Ebene größer, beim Freigeben jedoch nie kleiner. Ich kann release nicht verwenden, da ich ARC verwende. was mache ich hier falsch

Vielen Dank.

Antworten auf die Frage(2)

Ihre Antwort auf die Frage