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

tac*_*cos 13 inheritance objective-c nsobject superclass ios

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

Joh*_*eek 10

从技术上讲,没有.在对文件-[NSObject init]说,

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

因为它已被记录并且可能已经存在大量依赖它的代码,所以在未来版本的Mac OS X中这种情况不可能发生变化.

编辑: BoltClock的一个Unicorn提出了一个我想要更加夸张的观点:不要求-[NSObject init]每个人运行你的程序所节省的总时间不可能超过你改变超类时所产生的调试时间为你的班级以外的东西NSObject而忘记添加一个电话[super init].


Bol*_*ock 6

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

initNSObject类中定义的方法不进行初始化; 它只是返回self.

我想没有打电话[super init]是没有害处的,但没有理由不遵守惯例,你知道,无论如何都要在你的子类中调用它.例如,您的子类将来可能最终继承自另一个类,这可能包含-init您自己的子类将需要的方法中的初始化逻辑.