为什么超级不需要分配?

时间:2012-06-21 04:42:51

标签: objective-c cocoa-touch allocation init super

我们在目标C alloc之前始终init,然后在编写init方法时,我们为什么不alloc super然后启动它?

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

2 个答案:

答案 0 :(得分:3)

因为“alloc”已经为你要实例化的对象分配了空间。

您的子类不需要为基类分配(单独)空间。

您还可以在this related question中找到一些有用的信息。

答案 1 :(得分:3)

分配子接口时,其大小包括父级的大小。它们不是单独的对象,而是它们的组合。必须初始化'super'才能准备其数据成员。然后您的对象初始化其成员。例如,假设您有一个自定义引用计数接口,需要将“refCnt”初始化为1.然后将接口基于该接口。这意味着您的接口的分配大小是引用计数接口的大小+特定贡献的大小。 (例如,引用计数接口中的'int refCnt'和接口中的'int x'表示sizeof(您的接口)== 8~。)因此,分配只需要发生一次。然后,你初始化'super'(引用计数界面,在这种情况下),所以'refCnt'将是1.之后,你初始化自己的数据。