2011-02-14 60 views
0

因爲我是很新,Objective-C和內存管理,我很好奇,如果這個代碼是確定的 -內存管理困擾新手

首先,代碼返回一個UIImageView -

-(UIImageView *)somethingAnimation { 

UIImageView *something = [[UIImageView alloc] initWithImage:[UIImage imageNamed:@"Something.png"]]; 
something.frame = CGRectMake(-100, -100, kSomethingWidth, kSomethingHeight); 

return something; // released later by the Swarmer object 

} 

然後調用它的代碼,其中的UIImageView *的東西是在接口中聲明,那麼這是在執行 -

something = [controller somethingAnimation]; 

後來 -

[something release]; 

這是否正確地釋放一切?似乎工作沒有記憶或崩潰的問題。非常感謝您的幫助。

+1

這使得該類更少重用。想象一下,你與朋友分享這些代碼,他稱之爲動畫方法,但不知道他必須稍後調用發佈。現在他有內存泄漏,因爲他信任你的代碼遵循蘋果公司在其[內存管理編程指南]中規定的約定(http://developer.apple.com/library/mac/#documentation/cocoa/conceptual/ MemoryMgmt/MemoryMgmt.html)。 – Tobias 2011-02-14 22:16:34

回答

3

Memory Management Programming Guide定義了一組命名約定,用於確定方法是返回一個「擁有」對象還是一個自動釋放對象。根據這些約定,名爲-somethingAnimation的方法肯定應該返回一個自動釋放對象。所以在你的情況下,你應該返回[something autorelease],而不是稍後釋放它。

+0

這是否意味着如果我打電話給方法「newSomethingAnimation」(因爲我想要一個新的動畫),那會好嗎? – SomaMan 2011-02-14 22:03:28

2

它在技術上有效,但這是不好的做法。在返回之前,你應該真的自動釋放它。不要依賴任何人知道釋放它。