2011-07-03 173 views
5

爲什麼我們在Objective C中創建構造函數時總是這樣做?在Objective-C中創建構造函數

self = [super init]; 
if (self) { 
    //Initialization code here 
} 
+3

問題[一些初級的Objective-C/iPhone問題](HTTP:// stackoverflow.com/questions/710568/some-beginner-objective-c-iphone-questions)在第一部分提出了同樣的問題,你應該閱讀Barry的答案。另見Wil Shipley的「自我= [愚蠢的初始];」文章更多:http://www.wilshipley.com/blog/2005/07/self-stupid-init.html –

+0

剛剛發現,這是斯坦福大學iOS講座第4講(約25分鐘)最好的解釋。 – NSExplorer

回答

7

因爲[super init]被允許返回不同的對象一個比它呼籲我們重新分配給self。我們if (self),因爲[super init]被允許返回nil

1

self是基於某些超類的類(例如UIViewController,NSObject - 請參閱您的接口文件以確定哪一個)。超類可能需要某種形式的初始化才能使子類按預期工作。因此,通過首先初始化超類,我們確保設置默認屬性等。如果不先初始化超類,我們可能會遇到一些非常意想不到的行爲,特別是在像ViewControllers等更復雜的對象中。

+4

實際上,init方法中的'self'不是一個類。這是當前類的未初始化的實例。 – Chuck

+0

是的,對。感謝您的更正。 –

9

您可以創建在Objective-C的構造函數和析構函數與

-(id) init 
{ 
    self = [super init]; 
    if(self) 
    { 
     //do something 
    } 
    return self; 
} 
-(void) dealloc 
{ 
    [super dealloc]; 
}