通常当我从UI
类继承时,我将调用感兴趣的超类初始值设定项。但是,我不确定NSObject
的实现细节,似乎在成员变量方面没有太多进展,所以我想知道:如果我的子类,我需要调用[super init]
延伸NSObject
?
答案 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
指定的初始化程序之一进行调用,因为您应该执行明确且正确的操作。