20

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

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

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

它工作得很好,但代码读起来不太好。似乎 NSProxy 将提供一种更简洁的方式来实现此功能。

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

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

4

1 回答 1

15

关键NSProxy是它没有实现大多数方法。这对于确保在开始时调用 Objective-C 转发机制是必要的。如果以 开头NSObject,则有很多方法将直接发送,而您没有机会转发它们。

于 2013-08-17T03:20:21.743 回答