2011-06-01 64 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