很抱歉提出一个完全基本的问题,但是如果我有一个保留的综合属性。
self.myProperty = [[NSObject alloc] init];
会导致内存泄漏吗?
所以我认为我需要做的是正确的
self.myProperty = [[NSObject alloc] init];
[self.myProperty release];
为了平衡?因为那似乎很蠢。
答案 0 :(得分:2)
标准做法是在这种情况下使用autorelease
。所以:
self.myProperty = [[[NSObject alloc] init] autorelease];
这是因为init
会返回一个保留的对象,并且由于您的属性也会保留它,因此您必须将其释放。
编辑添加:@walkytalky在评论中指出实际上alloc
保留了对象,init
只返回它。
答案 1 :(得分:0)
启用ARC后,xcode将处理内存管理。 不使用ARC时,请务必使用dealloc方法释放它。
答案 2 :(得分:0)
你是对的。没有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
就个人而言,我可能只是在上面的第一个例子中使用自动释放。