吾尝以为NSObject
是Apple的所有Objective-C引用类型的老祖宗,直到后来知道了NSProxy
的存在…
NSProxy
和class NSObject
平级,彼此没有继承关系;唯一的相同点是它们都遵循protocol NSObject
。尚未在开发中使用过NSProxy
,最近琢磨需求开发的方案时注意到了这个类的存在,有不少疑问,譬如NSproxy
存在的意义是什么?如何使用它呢?本文将疑惑记录下来,并尝试自我解惑。
NSProxy简介
NSProxy
是一个抽象类,它实现了protocol NSObject
所要求的基本方法,譬如内省相关的-isKindOfClass:
、派发消息相关的performSelector系列方法等;但是不能直接使用它创建对象。
子类化NSProxy
的要求也很简单,实现-forwardInvocation:
和-methodSignatureForSelector:
这两个方法即可;显然,这两个方法与消息转发相关,实现这两个方法的典型姿势是:
- (void)forwardInvocation:(NSInvocation *)anInvocation {
[anInvocation invokeWithTarget:_realObject]; // _realObject是自定义的实例变量
}
– (NSMethodSignature *