通常,当我从UI
类继承类时,我将调用感兴趣的超类初始化程序。不过,我不确定NSObject
的实现细节,看起来成员变量没有多少变化,所以我想知道:如果我的子类延伸NSObject
,我需要调用[super init]
吗?我是否需要为NSObject调用[super init]或[super initWithCoder]等等
8
A
回答
8
从技术上讲,没有。该documentation for -[NSObject init]
说
在
NSObject
类中定义的init
方法不做任何初始化;它只是返回self
。
因为它是记录,并且已经有可能是一堆依赖于它的代码,这其实是高度不可能在Mac OS X的未来版本中改变
编辑:BoltClock's a Unicorn带来我希望做出更多的双曲线:通过不为每个运行程序的人调用-[NSObject init]
节省的总时间不可能超过如果您将类的超类更改为某种东西时所发生的调试时间除了NSObject
而忘记添加致电[super init]
。
4
从documentation,它似乎并没有做任何初始化都:
在NSObject类中定义的
init
方法不做任何初始化;它只是返回self
。
我想没有理由不打电话给[super init]
,但没有理由不遵循约定,并且你知道,无论如何都要在你的子类中调用它。例如,你的子类将来可能会从另一个类继承,这可能包含子类将要求的其自己的-init
方法中的初始化逻辑。
0
只需通过super
的指定初始值设定项在您的实现中调用,因为您应该做的事情是清晰和正确的。
相关问题
- 1. 为什么需要[super loadView]或[super viewDidLoad]?
- 2. 为什么在Objective-C中,我们使用self = [super init]而不是[super init]?
- 3. Filehelpers,Super CSV:是否有Python等价物?
- 4. [super init]为什么会返回零,当“超级”是NSObject?
- 5. Self = [super init]
- 6. if((self = [super init]))?
- 7. 在init中调用init,在self = [super init]之前调用
- 8. 等价于super()for functools.singledispatch
- 9. 这是为什么在python super().__ init __(** kwargs)
- 10. 子类化实现NSCoding的对象时是否需要调用[super encodeWithCoder]?
- 11. 如果仅调用super .__ init__,那么是否需要__init__?
- 12. 调用SUPER :: new()
- 13. super init sprites不匹配
- 14. super().__ init __()失败,错误
- 15. 为什么super不需要分配?
- 16. 只要init调用[super init],在Objective C自定义init方法中调用[self init] OK?
- 17. 是否始终调用NSObject init?
- 18. 为什么我需要在iOs中使用[super%methodname%]?
- 19. 为什么initWithCoder需要self.property?
- 20. 是否需要从UserData调用cfn-init?
- 21. 我是否必须在NSManagedObject didTurnIntoFault中调用super?
- 22. 您是否将super()调用作为构造函数的开始?
- 23. 行为super`
- 24. 使用super调用init的多个父类?
- 25. Objective-c - [super init]返回什么?
- 26. super init不能与object.h一起工作
- 27. 什么时候需要从构造函数调用`super`?
- 28. super()从哪里调用?
- 29. 可以调用[super loadView]吗?
- 30. Python super()参数:为什么不是super(obj)?