将新目标C对象分配给保留属性?

时间:2012-06-19 21:09:39

标签: objective-c memory-management retaincount alloc

很抱歉提出一个完全基本的问题,但是如果我有一个保留的综合属性。

 self.myProperty = [[NSObject alloc] init];

会导致内存泄漏吗?

所以我认为我需要做的是正确的

self.myProperty = [[NSObject alloc] init];
[self.myProperty release];

为了平衡?因为那似乎很蠢。

4 个答案:

答案 0 :(得分:2)

标准做法是在这种情况下使用autorelease。所以:

self.myProperty = [[[NSObject alloc] init] autorelease];

这是因为init会返回一个保留的对象,并且由于您的属性也会保留它,因此您必须将其释放。

编辑添加:@walkytalky在评论中指出实际上alloc保留了对象,init只返回它。

答案 1 :(得分:0)

启用ARC后,xcode将处理内存管理。 不使用ARC时,请务必使用dealloc方法释放它。

答案 2 :(得分:0)

你会发现有用的

Here is a thread

你是对的。没有ARC,任何保留的属性也需要释放。

你也可以这样做:

self.myProperty = nil;

来自docs

  

保留

     

指定应在对象上调用retain   分配。

     

先前的值会发送一条释放消息。

答案 3 :(得分:0)

另一种(更详细的)技术是:

NSObject *o = [[NSObject alloc] init]; //retain count 1
self.myProperty = o;                   //retain count 2
[o release];                           //retain count 1

就个人而言,我可能只是在上面的第一个例子中使用自动释放。