2012-03-23 60 views
1

我正在從Paul Hegarty的斯坦福大學CS193P學習。然後,我看到這樣的事情,我也看到其他人使用:在objective-c中,if(self){[self initFOO]}是多餘的?

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

是不是多餘的?爲什麼不只是使用:

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

我認爲消息到零隻是失敗,所以爲什麼不使用這第二種格式?

回答

5

你可能想要做的其他事情比傳遞消息自我。例如:

- (id)init 
{ 
    self = [super init]; 
    if (self) { 
     // set up ivars 
     _anIvar = 5; 
    } 
    return self; 
} 
4

[self someSetupFunctions]是什麼意思是一些初始化代碼,不只是一個方法調用,如果self爲零,許多重要的事情將失敗。最值得注意的是,試圖將初始值分配給實例變量會崩潰。

0

self = [super init]; if (self)測試是因爲某些initialisers將返回不同的對象,包括nil如果這是不可能創建滿足由初始化器所需要的條件的對象。

在你自己的初始化程序中,你需要防禦這樣做的超類,因爲如果你試圖訪問nil上的一個實例變量,那你肯定是做錯了事情(不管它是否因此而崩潰:它通常會)。