2009-11-07 68 views
1

我不是下列建设这段代码等效

if (self = [super init]) 
{ 
//do something with self assuming it has been created 
} 

为以下等同的粉丝吗?

self = [super init]; 

if (self != nil) 
{ 
//Do something with Self 
} 
+0

是的,他们是一样的。 – codelogic 2009-11-07 09:04:13

+0

@codelogic为什么不能回答? – 2009-11-07 09:28:40

回答

7

是的,他们是。 =运算符返回值。

1

Lars D有你的答案,但如果你正在寻找一种方式来清理你的init方法,我更喜欢以下内容:

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

    // your logic 

    return self; 
} 

它的CRAM所有的不愉快的成一条线,它离开你的方法的其余部分没有一个if声明(和相关的括号)。

+0

我来自Delphi背景,所以我发现赋值运算符和等号运算符在if语句中混合过度混淆,这就是为什么我试图将它从if语句中移出。 – 2009-11-07 09:56:31

2

你也不妨参考Wil Shipley在他的"self = [stupid init];"这篇文章中对此的看法。他原本建议

- (id)init; 
{ 
if (![super init]) 
    return nil; 

[...initialize my stuff...] 
return self; 
} 

但是它展示了在这可能失败,目前并不得与未来苹果公司的一些变化工作的情况屈指可数。他现在推荐

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

// other stuff 
return self; 
}