Can't release unused CALayer memory when using multiple layers

calayer, instruments, memory-management, objective-c, uiimage

Solution

UIImage's `imageNamed:` method uses a static cache that is only released upon tight memory situations.

Your options are:

- Use `-[UIImage imageWithContentsOfFile:]` instead.

- Ignore the problem. The cache is cleaned up when a memory notification comes in.

Problem

I am using multiple CALayer's in my application with large UIImage as contents. unfortunately, when I don't need the layer nor the image - the memory is not freed. the code I use to create the layer is: ``` 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) ``` the code I use to release the layer and it's contents is : ``` CALayer * l = [self.tmpArr objectAtIndex:i]; [l removeFromSuperlayer]; [l setHidden:YES]; [l setContents:nil]; [self.tmpArr removeAllObjects]; ``` when I'm using the instruments memory profiler I see the real memory increasing when creating the layer but never decreasing when freeing there. I can't use release since I am using ARC. what do I do wrong here ? Thanks.

Original source