为什么((self = [super init]])工作,但(!(self = [super init]))不工作?

时间:2011-05-07 12:55:47

标签: objective-c xcode ios

出于审美原因,我决定改变这一点:

if ((self = [super init])) {
    // init self
}
return self;

进入这个:

if (!(self = [super init])) return nil;
// init self
return self;

理论上,他们做同样的事情。第一个是经典的方式,简单的工作。调试第二个,我发现它几乎工作。 “if”是正确的,init代码也是,但是,在返回“self”之后,调试器返回“if”并返回nil!

我用第二个类制作的所有类我都会使用“正确”的方式,因为它们以nil启动,但我真的想知道为什么它会像那样!我担心这可能是其他错误的结果!

2 个答案:

答案 0 :(得分:3)

除了审美偏好之外,你的两个版本之间绝对没有区别,所以别的东西一定是出错了。也许您应该发布整个init方法?

答案 1 :(得分:1)

我为此创建了一个测试类,使用以下init方法:

- (id)init
{
    if (!(self = [super init])) return nil;
    [self setText:@"foo"];
    return self;
}

按预期初始化,我可以访问text属性。正如尼克指出的那样,其他一些事情必定是失灵的。