例如:
@interface Fraction: NSObject {
...
何时不使用NSObject
并且NSObject
是所有其他类的最终父类?
请随时使用任何错误的术语来纠正我。
答案 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是根。