很抱歉问了一个完全基本的问题,但如果我有一个保留的综合属性。
self.myProperty = [[NSObject alloc] init];
会导致内存泄漏吗?
所以我认为我需要做的事情是否正确
self.myProperty = [[NSObject alloc] init];
[self.myProperty release];
为了平衡?因为这看起来很愚蠢。
很抱歉问了一个完全基本的问题,但如果我有一个保留的综合属性。
self.myProperty = [[NSObject alloc] init];
会导致内存泄漏吗?
所以我认为我需要做的事情是否正确
self.myProperty = [[NSObject alloc] init];
[self.myProperty release];
为了平衡?因为这看起来很愚蠢。
标准做法是autorelease
在这种情况下使用。所以:
self.myProperty = [[[NSObject alloc] init] autorelease];
这是因为init
返回一个保留的对象,并且由于您的属性也保留了它,因此您必须释放它。
编辑添加:@walkytalky 在评论中提出了一个很好的观点,即它实际上alloc
保留了对象,init
只是返回它。
启用 ARC 后,xcode 将处理所有内存管理。当不使用 ARC 时,一定要在 dealloc 方法中释放它。
另一种(更详细的)技术是:
NSObject *o = [[NSObject alloc] init]; //retain count 1
self.myProperty = o; //retain count 2
[o release]; //retain count 1
不过就个人而言,我可能只是像上面第一个示例中那样使用自动释放。