如何拦截对 id<protocol> 对象的调用?

How to intercept calls to id<protocol> objects?

我正在将我的代码与 returns 的框架链接到我的 id<protocol> 类型的应用程序对象。但是,我不知道 class 它们是什么。 有没有一种方法可以拦截发送到程序中那些对象的消息,也许也可以有选择地拦截消息,例如,我想拦截消息 A 而不是消息 B。 我考虑过使用 method_exchangeImplementations 但它似乎对我没有帮助,因为它需要知道 class 而我不知道。

id<protocol> 的意思是,从字面上看,除了响应 protocol@required 中的 @required 方法外,此对象没有任何其他保证。 =24=].

在等式的 id 部分依赖自定义行为肯定会产生脆弱、难以维护的代码库。每次框架修订时,您都必须对成功和失败案例进行全面的资格审查,以确保您对该框架行为的解释仍然正确。如果您没有所述框架的来源,那么您将面临一大堆黑匣子侦查。

所以,不要那样做。除非您正在编写测试工具或进行一些高级调试。它可能非常有用。

如果您想去那里,@simple_code 提到了 Aspects 库,这是一个很好的起点。由于您不知道将要接收的内容的类型,因此您可能需要使用 isKindOfClass: 进行一些类型消歧,但是,沿着这条路走下去会让您接触到越来越多依赖于框架的实现细节(不仅仅是接口)不会改变。