例如:
界面中的:
@property(retain) NSObject* anObject;
界面中的在实施中:
-(id)initWithAnotherObject:(NSObject*)another{
if(self = [super init]){
anObject = another; //should this be anObject = [another retain]?
}
return self;
}
答案 0 :(得分:6)
是的,因为您无法保证“另一个”生命周期与您创建的对象的生命周期相同,您需要确保将其保留在init方法中(并且不要忘记在dealloc方法中释放它)。所以以下是正确的:
...
if(self = [super init]){
anObject = [another retain];
}
...
还有一件事 - 通过为anObject定义保留属性,你说你取得了该对象的所有权,因此你必须在dealloc方法中释放它。如果你没有在init方法中保留'another'参数,它将最终被释放(在dealloc或setter方法中)而不被保留 - 因此你的应用程序可能会因EXEC_BAD_ACCESS
错误而崩溃。
答案 1 :(得分:2)
我认为这是一个很好的做法
self.anObject = another;
但它是一样的