gpt4 book ai didi

objective-c - 我应该总是为失败的初始化方法释放 self 吗?

转载 作者:IT王子 更新时间:2023-10-28 23:32:31 27 4
gpt4 key购买 nike

当 init 内部出现故障时我应该总是释放 self,还是应该只在我首先初始化实例变量时才这样做?

换句话说,这种模式有效吗?是否有一段时间我不应该在 init 方法中释放 self,或者我应该假设如果控制流进入 init,self 的保留计数至少为 1?

- (id)init
{
if ((self = [super init]) == nil)
{
[self release];
return nil;
}

//do some init stuff
if (somethingFailed)
{
[self release];
return nil;
}
return self;
}

最佳答案

如果您在初始化方法中需要的某些检查失败,那么是的,您应该释放 self。但是请注意,如果 [super init] 返回 nil,则将 release 发送到 self 作为 selfnil。这实际上是苹果不赞成的:

You should only call [self release] at the point of failure. If you get nil back from an invocation of the superclass’s initializer, you should not also call release.

例子:

- (id)init
{
self = [super init];
if(self) {
// do some init stuff

if (somethingFailed)
{
[self release]
self = nil;
}
}

return self;
}

另请参阅 Handling Initialization Failure 上的 Mac 开发中心文档

关于objective-c - 我应该总是为失败的初始化方法释放 self 吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2467685/

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