出于审美原因,我决定改变这一点:
if ((self = [super init])) {
// init self
}
return self;
进入这个:
if (!(self = [super init])) return nil;
// init self
return self;
理论上,他们做同样的事情。第一个是经典的方式,简单的工作。调试第二个,我发现它几乎工作。 “if”是正确的,init代码也是,但是,在返回“self”之后,调试器返回“if”并返回nil!
我用第二个类制作的所有类我都会使用“正确”的方式,因为它们以nil启动,但我真的想知道为什么它会像那样!我担心这可能是其他错误的结果!
答案 0 :(得分:3)
除了审美偏好之外,你的两个版本之间绝对没有区别,所以别的东西一定是出错了。也许您应该发布整个init
方法?
答案 1 :(得分:1)
我为此创建了一个测试类,使用以下init方法:
- (id)init
{
if (!(self = [super init])) return nil;
[self setText:@"foo"];
return self;
}
按预期初始化,我可以访问text属性。正如尼克指出的那样,其他一些事情必定是失灵的。