0

我们alloc之前总是init在Objective C中,然后在写方法的时候init,为什么我们不先启动它呢?allocsuper

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

2 回答 2

3

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

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

您还可以在这个相关问题中找到一些有用的信息。

于 2012-06-21T04:52:28.473 回答
3

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

于 2012-06-21T04:54:57.620 回答