我是否需要为NSObject调用或等

通常,当我从UI类inheritance时,我将调用感兴趣的超类初始化程序。 但是,我不确定NSObject的实现细节,似乎在成员变量方面没有太多进展,所以我想知道:如果我的子类扩展NSObject我是否需要调用[super init]

从技术上讲,没有。 -[NSObject init]的文档说明了这一点

NSObject类中定义的init方法不进行初始化; 它只是回归self

因为它是文档化的,并且可能已经有很多依赖它的代码,所以在未来的Mac OS X版本中这种情况几乎不可能改变。

编辑: BoltClock的一个Unicorn提出了一个我想要更加夸张的观点:不调用的总节省时间-[NSObject init]对于每个运行程序的人来说都不可能超过你发生的调试时间你曾经把你的类的超类更改为NSObject其他东西而忘记添加对[super init]的调用。

从文档中 ,它似乎根本不进行任何初始化:

NSObject类中定义的init方法不进行初始化; 它只是回归self

我想没有调用[super init]是没有理由的,但是没有理由不遵循约定,你知道,无论如何都要在你的子类中调用它。 例如,您的子类将来可能最终inheritance自另一个类,它可能在其自己的-init方法中包含初始化逻辑,您的子类将需要该方法。

只需在您的实现中调用super指定的初始化程序之一,因为您应该只做清楚正确的事情。