iOS 中 NSProxy 的特性与应用
15 December 2020
iOS 中 NSProxy 的特性与应用
NSProxy 的特性
NSProxy的主要功能,负责把消息转发给真正的target的代理类;NSProxy没有继承NSObject,但是实现了NSObject协议,作为一个抽象类,它没有实现初始化方法,并且会在收到任何它不响应的消息时会引发异常;NSProxy的子类必须要实现一个初始化或创建方法,并要重写- (void)forwardInvocation:(NSInvocation *)invocation;和-(nullable NSMethodSignature *)methodSignatureForSelector:(SEL)sel方法,来转发它没实现的方法;NSProxy自省方法的默认实现是将消息forward到realObject,也就是说NSProxy会将自省相关的selector直接forward到-forwardInvocation:回调中,这些自省方法包括:
```- (BOOL)isKindOfClass:(Class)aClass;
- (BOOL)isMemberOfClass:(Class)aClass;
- (BOOL)conformsToProtocol:(Protocol *)aProtocol;
- (BOOL)respondsToSelector:(SEL)aSelector; ```

NSProxy 的应用
-
模拟类似多继承功能,实现多个对象消息的分发 实现方法是定义一个NSProxy的子类,添加多个NSObject代理对象的属性变量,并在
forwardInvocation,methodSignatureForSelector与respondsToSelector方法中分依次去实现多个代理对象的方法即可。 -
解决NSTimer 实现方法同样是定义一个
NSProxy的子类,并在forwardInvocation与methodSignatureForSelector方法中调用代理对象对应的方法,在使用NSTimer的时候,把proxy对象作为target传入即可。
参考:
NSProxy的理解和使用:https://juejin.cn/post/6844903606483681288
NSProxy:https://zhangbuhuai.com/post/nsproxy.html
