爲什麼我們在Objective C中創建構造函數時總是這樣做?在Objective-C中創建構造函數
self = [super init];
if (self) {
//Initialization code here
}
爲什麼我們在Objective C中創建構造函數時總是這樣做?在Objective-C中創建構造函數
self = [super init];
if (self) {
//Initialization code here
}
因爲[super init]
被允許返回不同的對象一個比它呼籲我們重新分配給self
。我們if (self)
,因爲[super init]
被允許返回nil
。
self
是基於某些超類的類(例如UIViewController,NSObject - 請參閱您的接口文件以確定哪一個)。超類可能需要某種形式的初始化才能使子類按預期工作。因此,通過首先初始化超類,我們確保設置默認屬性等。如果不先初始化超類,我們可能會遇到一些非常意想不到的行爲,特別是在像ViewControllers等更復雜的對象中。
實際上,init方法中的'self'不是一個類。這是當前類的未初始化的實例。 – Chuck
是的,對。感謝您的更正。 –
您可以創建在Objective-C的構造函數和析構函數與
-(id) init
{
self = [super init];
if(self)
{
//do something
}
return self;
}
-(void) dealloc
{
[super dealloc];
}
問題[一些初級的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 –
剛剛發現,這是斯坦福大學iOS講座第4講(約25分鐘)最好的解釋。 – NSExplorer