2009-11-07 71 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; 
}