Dav*_*ong 11 theory cocoa objective-c
我们知道在Objective-C中有两个主要的根类: NSObject
和NSProxy
.还有其他根(主要用于私人和遗留目的),如Object
和NSLeafProxy
.
定义一个新根是相当简单的:
@interface DDRoot <NSObject>
@end
@implementation DDRoot
//implement the methods required by <NSObject>
@end
Run Code Online (Sandbox Code Playgroud)
我的问题是:你为什么要定义一个新的根类?是否有必要使用某些用例?
bbu*_*bum 12
创建新的根类有两个主要原因; 代理和新的对象模型.
代理时,实现新的根类可能很有用,这样您基本上可以自定义方式处理任何和所有类/对象的行为.请参阅NSProxy.
Objective-C运行时非常灵活,您可以非常轻松地支持新的对象模型(在这里可以轻松地折扣创建这样的野兽的固有复杂性).实际上,许多被认为是运行时固有的行为--KVC,KVO等 - 都是作为NSObject
类本身的一部分实现的.
我知道至少有一家公司 - 至少在大约8年前 - 已经实施了他们自己的对象模型,作为构建他们的~500k LOC财务分析引擎的一部分.
关键,但是,是,如果你走这条路线,你不要试图让你的班,基金会/ CF/AppKit的/ UIKit的互动等,如果你需要的是,只要继承NSObject的了!
值得注意的是NSManagedObject
,它实际上是一个根类,因为它做了一些非常认真的自定义内容,但是它是子类的NSObject
子类,NSManagedObject
可以与系统的其余部分互操作.
据我所知,应该没有理由创建自己的根类,因为如果你自己实现所有的NSObject
协议方法,你就会错过很多功能,并且会创建一个很多对Objective-C运行时的调用本质上应该为你完成.
除非你真的不得不从默认执行不同的协议(NSProxy
是一种特殊情况确实需要),你不应该需要使自己的根类.我的意思是,你必须编写一个不能从根本上代表的类NSObject
和Apple实现的协议,在这种情况下,为什么你甚至用Objective-C编写它?
那就是我所想的.也许有人可以为它创造性地使用它.
(研究该主题的人应该查看NSObject类参考,NSObject协议参考,'核心能力:根类'文档,以及" 基础指南:可可对象"文档中的"根类"部分.)