2011-06-01 63 views
-1

這段代碼對於內存管理是否可以正常運行?@properties - 內存管理

@property (nonatomic, retain) id object; 
... 
id anObject = [[Object alloc] init]; 
self.object = anObject; 
id otherObject = [[Object alloc] init]; 
self.object = otherObject; 

謝謝您的回答, 基督教

回答

2

號作爲屬性描述符表示,它將保留對象時,它的分配。所以,當你分配它的時候,你將在你的對象中有兩個保留,分配給self.object。所以,你必須發佈它:

@property (nonatomic, retain) id object; 
... 
id anObject = [[Object alloc] init]; 
self.object = anObject; 
[anObject release]; 

id otherObject = [[Object alloc] init]; 
self.object = otherObject; 
[otherObject release]; 
... 
at dealloc: 
self.object = nil; 

祝你好運!

+0

我更喜歡使用方便的方法,如果沒有,我總是[[[Class alloc] init] autorelease]。看起來比用另外一行來釋放似乎很奇怪的對象更漂亮。但我想這是一個品味問題 – 2011-06-01 17:21:54

+2

這也是創建自動釋放對象的問題。假設OP的代碼處於一個緊密的循環中:明確釋放比建立大量自動釋放內存要好得多。 – kevboh 2011-06-01 17:24:34