objective-c - 定义新的根类有哪些用例?

标签 objective-c cocoa theory

我们知道在 Objective-C 中有两个主要的根类:NSObjectNSProxy。还有其他根(主要用于私有(private)和遗留用途),如 ObjectNSLeafProxy

定义一个新根相当简单:

@interface DDRoot <NSObject>

@end

@implementation DDRoot

//implement the methods required by <NSObject>

@end

我的问题是:您为什么要定义一个新的根类?是否有一些必要的用例?

最佳答案

创建新根类有两个主要原因;代理和新的对象模型。

代理时,实现一个新的根类很有用,这样您就可以基本上以自定义方式处理任何和所有类/对象的行为。请参阅 NSProxy。

Objective-C 运行时非常灵活,您可以非常轻松地支持新的对象模型(其中轻松首先降低了创建这种野兽的固有复杂性)。实际上,许多被认为是运行时固有的行为——KVC、KVO 等——是作为 NSObject 的一部分实现的。类本身。

我知道至少有一家公司——至少在大约 8 年前——已经实现了自己的对象模型,作为构建其约 500k LOC 财务分析引擎的一部分。

不过,关键是如果你走这条路,你不要尝试让你的类与 Foundation/CF/AppKit/UIKit 等交互。如果你需要 ,只是子类化 NSObject 了!

有趣的是 NSManagedObject实际上是一个根类,因为它做了一些非常严肃的定制工作,但它是 NSObject 的子类。所以 NSManagedObject 的子类与系统的其余部分可互操作。

关于objective-c - 定义新的根类有哪些用例?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4295317/

相关文章:

java - 定义中的初始化与构造函数中的初始化

language-agnostic - 你希望在你最喜欢的编程语言中什么是自动的?

ios - CGRectMake : How To Calculate X and Y For UIPickerView Animation?

iOS didAcceptNewSocket 预期不同的端口号

ios - UIImagePickerController 在 iOS 9 上不请求权限

objective-c - 如何在特定位置将 NSWindow 显示为工作表

ios - 在 Aspect Fit 上制作 UIView 的背景图像

objective-c - NSScanner 通过引用返回的 NSString 的所有权

objective-c - 过度释放使窗口 NumPy

computer-science - 验证语法是否强 LL(2)