何时不将NSObject称为父类?

时间:2009-07-01 00:24:07

标签: objective-c class nsobject

例如:

@interface Fraction: NSObject {
...

何时不使用NSObject并且NSObject是所有其他类的最终父类?

请随时使用任何错误的术语来纠正我。

3 个答案:

答案 0 :(得分:5)

Cocoa有两个根类:NSObject和NSProxy。

NSObject是几乎所有Cocoa对象的根类。

NSProxy是一个抽象超类,为对象定义API,作为其他对象或不存在的对象的替身,并且是NSDistantObject等类的根类。

这两个类都实现了NSObject协议。

也可以编写自己没有root类的Objective C类,但是你可能永远不会这样做,除非你也实现了它,否则你将无法在Cocoa中使用它。 NSObject协议,即便如此,它仍然是可疑的。

答案 1 :(得分:5)

在任何Cocoa应用程序中,如果检查运行时类树,您将找到五个根类:NSObject,Object,NSProxy,NSMessageBuilder和 NSZombie

您应用中的大多数普通对象都来自NSObject。 Object是Objective-C早期的原始根类,当NeXT开发企业对象框架时,它被NSObject取代。

运行时使用NSMessageBuilder进行消息转发。分布式对象实现使用NSProxy来处理编组消息以发送到其他进程中的对象,甚至是其他主机上的对象。 NSZombie 是一个用于调试内存泄漏的类。

答案 2 :(得分:4)

如果我正在编写NSView的子类,我会写:

@interface Fraction: NSView {...

因为我的类继承自NSView。 Objective-C中的类仅从单个父类继承。当你从NSView(到它的父类NSResponder)的链上工作时,你会发现它最终从NSObject继承。

我不确定你问题的第二部分。我认为Apple的Cocoa Frameworks中的所有类最终都继承自NSObject,但是不要引用我的话。在Objective-C中,没有理由为什么不能有其他根对象(否则Objective-C只会在Apple系统上使用)。但是,在Cocoa中,NSObject是根。