目标c中的重点是什么?

时间:2009-07-31 04:39:32

标签: iphone objective-c properties object-initialization

SomeObject *temp = [[SomeObject alloc] init]
self.theObject = temp;
[temp release];

为什么总是这样做?为什么不

self.theObject = [[SomeObject alloc] init];

2 个答案:

答案 0 :(得分:11)

如果theObject属性是保留属性,第一种方法是正确的,因为它不会泄漏内存。它比写第二个版本的正确方法更有效,这就是:

self.theObject = [[[SomeObject alloc] init] autorelease];

每当您使用alloc创建对象时,无论是release还是autorelease,您都要负责释放它。

答案 1 :(得分:1)

第二个版本泄漏了SomeObject实例,因为self.theObject将调用一个setter,如果写得正确,它将保留该对象。

你可以做到

theObject = [[SomeObject alloc] init];
有些人肯定会这样做。其他人更喜欢总是使用访问器,要么是一致性要么是为了避免错误,如果访问者有副作用(例如,你会绕过KVO通知,如果它不是init方法的一部分,这可能是一个问题)。