2014-03-27 83 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

相關問題