SomeObject *temp = [[SomeObject alloc] init]
self.theObject = temp;
[temp release];
为什么总是这样做?为什么不
self.theObject = [[SomeObject alloc] init];
答案 0 :(得分:11)
如果theObject
属性是保留属性,第一种方法是正确的,因为它不会泄漏内存。它比写第二个版本的正确方法更有效,这就是:
self.theObject = [[[SomeObject alloc] init] autorelease];
每当您使用alloc
创建对象时,无论是release
还是autorelease
,您都要负责释放它。
答案 1 :(得分:1)
第二个版本泄漏了SomeObject实例,因为self.theObject将调用一个setter,如果写得正确,它将保留该对象。
你可以做到
theObject = [[SomeObject alloc] init];
有些人肯定会这样做。其他人更喜欢总是使用访问器,要么是一致性要么是为了避免错误,如果访问者有副作用(例如,你会绕过KVO通知,如果它不是init方法的一部分,这可能是一个问题)。