2014-03-27 48 views
1

我有一个CALayer对象sublayer。我在我的视图控制器中将它用作self.sublayer,因为我已将它作为视图控制器头文件中的一个属性。需要释放CALayer的内容属性中包含的CGImage

我的子层的内容属性等于设置为使用CGImageRef对象调用imageRef创建UIImage对象:

self.subLayer.contents = (id)[UIImage imageWithCGImage:imageRef].CGImage; 

我再放开imageRef对象马上现在,它已经被用于创建子层内容,它不再需要:

CGImageRelease(imageRef); 

但是,这是什么在困扰着我。稍后在代码中,我将不再需要self.sublayer.contents,并且我想确保我释放它正确包含的CGImage

如果我的NSLog self.sublayer.contents将打印此控制台:<CGImage 0x146537c0>

所以我需要能够发布这款CGImage为好。

我试图用这个来释放CGImage,但NSLog的还是打印相同的控制台:
CGImageRelease((__bridge CGImageRef)(self.subLayer.contents));

如果我用这一点,的NSLog将打印到控制台(null),但我担心这在技术上没有释放CGImage

self.subLayer.contents = nil; 

请问子层的内容属性设置为nil正确释放的CGImage,还是我在T纠正h that它不是在技术上释放CGImage

我现在在我的应用程序中遇到内存问题,所以我需要确保我正确释放这个CGImage

+0

'sublayer'是视图的图层吗? –

+0

这是我如何设置子图层:self.subLayer = [CALayer图层]; – user3344977

回答

1

contents财产上CALayer是保持特性,这意味着它的setter实现或多或少做到这一点:

- (void)setContents:(id)contents 
{ 
    if (contents == _contents) return; // Same as existing value 
    [_contents release]; 
    _contents = [contents retain]; 
} 

所以,当你设置nil为新的内容,旧的内容是发布了

+0

谢谢你的回答,但我不得不说我有点失望。我以为我终于找到了导致内存问题的原因。好吧。 – user3344977

相关问题