2

例如:

@interface Fraction: NSObject {
...

什么时候不NSObject使用,并且是NSObject所有其他类的最终父类?

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

4

3 回答 3

5

Cocoa 有两个根类:NSObject 和 NSProxy。

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

NSProxy 是一个抽象超类,它为充当其他对象或尚不存在的对象的替代对象定义了一个 API,并且是 NSDistantObject 等类的根类。

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

也可以编写自己的没有根类的 Objective C 类,但你可能永远不会这样做,而且除非你还实现了 NSObject 协议,否则你将无法将它与 Cocoa 一起用于任何事情,即便如此,它的用途也很可疑。

于 2009-07-01T02:21:35.990 回答
5

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

应用程序中的大多数普通对象都将继承自 NSObject。Object 是 Objective-C 早期的原始根类,在 NeXT 开发企业对象框架时被 NSObject 取代。

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

于 2009-10-20T02:50:03.987 回答
4

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

@interface Fraction: NSView {...

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

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

于 2009-07-01T00:28:30.710 回答