NSProxy vs NSObject

时间:2013-08-17 03:04:43

标签: objective-c objective-c-runtime

我正在使用方法调配将所有方法调用包装在一个具有一些额外功能的类中。具体来说我是:

  • 检查此方法调用所需的对象是否在缓存中
  • 如果缓存有该对象返回它。
  • 如果没有,请调度到原始实现,填充缓存并返回该缓存。

对于每种方法,我都会重新路由到一个建议的方法。并使用+(BOOL)resolveInstanceMethod:(SEL)sel和IMP_implementationWithBlock实现新方法。

它工作正常,但代码没有很好地阅读。似乎NSProxy将提供一种更简洁的方式来实现此功能。

但还有另一种选择,就是简单地在我的目标对象的方法周围使用NSObject子类替换和拦截方法调用。通过重写forwardInvocation和methodSignatureForSelector,我可以获得所需的结果。

那么NSProxy给了我什么?我为什么要用这个呢?

1 个答案:

答案 0 :(得分:14)

NSProxy的要点是它没有实现大多数方法。这是必要的,以确保开始调用Objective-C转发机制。如果你从NSObject开始,有很多方法可以直接发送,而你没有机会转发它们。