我們總是在目標C之前init
之前alloc
,然後寫init
的方法,爲什麼我們不要alloc
a super
然後啓動它?爲什麼super不需要分配?
- (id) init {
if(self = [super init]){
//init iVars
}
return self;
}
我們總是在目標C之前init
之前alloc
,然後寫init
的方法,爲什麼我們不要alloc
a super
然後啓動它?爲什麼super不需要分配?
- (id) init {
if(self = [super init]){
//init iVars
}
return self;
}
當分配子接口時,其大小包括父級的大小。它們不是獨立的對象,它們被合併。 'super'必須被初始化,以便它可以準備其數據成員。然後你的對象初始化它的成員。例如,假設您有一個自定義引用計數接口,需要將'refCnt'初始化爲1.然後,將接口置於該接口上。這意味着您的界面的分配大小是參考計數界面的大小+您特定貢獻的大小。 (例如,引用計數接口中的'int refCnt'和接口中的'int x'意味着sizeof(您的接口)== 8〜)。因此,分配只需要發生一次。然後,你初始化'超級'(在這種情況下,引用計數接口),所以'refCnt'將是1.之後,你初始化你自己的數據。
請注意,'超'不是一個單獨的對象。它只是意味着「自我,但使用超類的命名方法的實現」。 –