1

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

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

会导致内存泄漏吗?

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

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

为了平衡?因为这看起来很愚蠢。

4

4 回答 4

2

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

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

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

编辑添加:@walkytalky 在评论中提出了一个很好的观点,即它实际上alloc保留了对象,init只是返回它。

于 2012-06-19T21:46:19.617 回答
0

启用 ARC 后,xcode 将处理所有内存管理。当不使用 ARC 时,一定要在 dealloc 方法中释放它。

于 2012-06-19T21:14:55.027 回答
0

这是一个你会发现有用的线程。

你是对的。如果没有 ARC,任何保留的财产也需要被释放。

你也可以这样做:

self.myProperty = nil;

文档

保持

指定在分配时应在对象上调用保留。

先前的值被发送一个释放消息。

于 2012-06-19T21:44:06.720 回答
0

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

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

不过就个人而言,我可能只是像上面第一个示例中那样使用自动释放。

于 2012-06-20T00:20:33.970 回答