我不是下列建設這段代碼等效
if (self = [super init])
{
//do something with self assuming it has been created
}
爲以下等同的粉絲嗎?
self = [super init];
if (self != nil)
{
//Do something with Self
}
我不是下列建設這段代碼等效
if (self = [super init])
{
//do something with self assuming it has been created
}
爲以下等同的粉絲嗎?
self = [super init];
if (self != nil)
{
//Do something with Self
}
是的,他們是。 =運算符返回值。
Lars D有你的答案,但如果你正在尋找一種方式來清理你的init
方法,我更喜歡以下內容:
- (id)init
{
if ((self = [super init]) == nil) { return nil; }
// your logic
return self;
}
它的CRAM所有的不愉快的成一條線,它離開你的方法的其餘部分沒有一個if
聲明(和相關的括號)。
我來自Delphi背景,所以我發現賦值運算符和等號運算符在if語句中混合過度混淆,這就是爲什麼我試圖將它從if語句中移出。 – 2009-11-07 09:56:31
你也不妨參考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;
}
是的,他們是一樣的。 – codelogic 2009-11-07 09:04:13
@codelogic爲什麼不能回答? – 2009-11-07 09:28:40