从NSObject继承如何工作?

Jas*_*ker 4 oop initialization objective-c init nsobject

关于Objective-C的一些事情让我很困惑:

首先,在objective-c指南中,很明显每个类都需要调用其子类的init方法.关于直接从NSObject继承的类是否需要调用其init方法有点不清楚.是这样的吗?如果是这样,为什么呢?

其次,在关于NSObject的部分中,有这样的警告:

但是,不需要从另一个类继承任何特殊行为的类应该成为NSObject类的子类.该类的实例必须至少具有在运行时表现为Objective-C对象的能力.从NSObject类继承此功能比在新的类定义中重新创建它更简单,更可靠.

这是否意味着我需要指定所有对象显式地从NSObject继承?或者这就像Java/Python/C#,其中所有类都是NSObject的子类型?如果没有,是否有任何理由制作除NSObject之外的根类?

fbr*_*eto 6

1)任何时候在Objective-C中分配一个对象,它的内存就会被清零,并且必须通过调用来初始化init.子类NSObject可能有自己的专门init例程,在这种情况下,他们应该调用他们的超类' init例程:

self = [super init];
Run Code Online (Sandbox Code Playgroud)

这个想法是,所有的init程序最终涓流达到NSObjectinit.

2)你需要明确继承:

@instance myClass : NSObject { /*...*/ } @end
Run Code Online (Sandbox Code Playgroud)

除了之外没有理由拥有一个根类NSObject- 很多Objective-C在很大程度上依赖于这个类,所以试图绕过它会导致你不必要地在脚下射击.