gpt4 book ai didi

objective-c - 我是否需要保留传递给自定义 initWith 方法的参数?

转载 作者:搜寻专家 更新时间:2023-10-30 19:56:54 26 4
gpt4 key购买 nike

例如:

在界面中:

@property(retain) NSObject* anObject;

在界面中,实现中:

-(id)initWithAnotherObject:(NSObject*)another{
if(self = [super init]){
anObject = another; //should this be anObject = [another retain]?
}
return self;
}

最佳答案

是的,因为您不能保证“另一个”生命周期与您创建的对象的生命周期相同,您需要通过在 init 方法中保留它来确保这一点(并且不要忘记在 dealloc 方法中释放它)。所以以下是正确的:

...
if(self = [super init]){
anObject = [another retain];
}
...

还有一件事 - 通过为对象定义保留属性,您表示您拥有该对象的所有权,因此您必须在 dealloc 方法中释放它。如果您不在 init 方法中保留“另一个”参数,它最终将被释放(在 dealloc 或 setter 方法中)而不被保留 - 因此您的应用程序可能会因 EXEC_BAD_ACCESS 错误而崩溃。

关于objective-c - 我是否需要保留传递给自定义 initWith 方法的参数?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5815845/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com