alloc
以前はいつもinit
Objective C でinit
メソッドを書いていましたが、なぜメソッドを作成してから開始しないalloc
のsuper
でしょうか?
- (id) init {
if(self = [super init]){
//init iVars
}
return self;
}
alloc
以前はいつもinit
Objective C でinit
メソッドを書いていましたが、なぜメソッドを作成してから開始しないalloc
のsuper
でしょうか?
- (id) init {
if(self = [super init]){
//init iVars
}
return self;
}
「alloc」は、インスタンス化するオブジェクトのスペースを既に割り当てているためです。
サブクラスは、基本クラスに (別の) スペースを割り当てる必要はありません。
また、この関連する質問で役立つ情報を見つけることができます。
子インターフェイスが割り当てられると、そのサイズには親のサイズが含まれます。それらは別々のオブジェクトではなく、組み合わされています。'super' は、データ メンバーを準備できるように初期化する必要があります。次に、オブジェクトはそのメンバーを初期化します。たとえば、'refCnt' を 1 に初期化する必要があるカスタム参照カウント インターフェイスがあるとします。次に、そのインターフェイスに基づいてインターフェイスを作成します。つまり、インターフェイスの割り当てサイズは、参照カウント インターフェイスのサイズ + 特定のコントリビューションのサイズです。(たとえば、参照カウント インターフェイスの 'int refCnt' とインターフェイスの 'int x' は sizeof(your interface)==8~ を意味します。) したがって、割り当ては 1 回だけ行う必要があります。次に、'super' (この状況では参照カウント インターフェイス) を初期化して、'refCnt' を 1 にします。