我是否需要为NSObject调用[super init]或[super initWithCoder]等

时间:2012-04-02 04:21:20

标签: objective-c ios inheritance nsobject superclass

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

3 个答案:

答案 0 :(得分:10)

从技术上讲,没有。 documentation for -[NSObject init]表示

  

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

因为它已被记录并且可能已经有很多依赖它的代码,所以高度在未来的Mac OS X版本中不太可能发生变化。

编辑: BoltClock's a Unicorn提出了一个我想要更加夸张的观点:不为每个运行程序的人调用-[NSObject init]所节省的总时间不太可能如果您将班级的超类更改为NSObject以外的其他内容而忘记添加对[super init]的调用,则会超出您发生的调试时间。

答案 1 :(得分:5)

documentation,它似乎根本不进行任何初始化:

  

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

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

答案 2 :(得分:0)

只需在您的实施中通过super指定的初始化程序之一进行调用,因为您应该执行明确且正确的操作。