我将我的代码链接到框架,该框架返回到id<protocol>
类型的app对象。但是,我不知道他们是什么课。
有没有办法可以拦截发送到我的程序中的那些对象的消息,也许有选择地,例如,我想拦截消息A
而不是消息B
。
我考虑过使用method_exchangeImplementations
,但这似乎对我没有帮助,因为它需要了解课程并且我不知道。
答案 0 :(得分:1)
id<protocol>
完全意味着,除了响应协议中的@required
方法之外,没有任何关于此对象的保证>
依赖于等式id
部分的自定义行为,可以保证产生易碎,难以维护的代码库。每次框架转动时,您都必须对成功案例和失败案例进行完全限定通过,以确保您对该框架行为的解释仍然正确。如果你没有这个框架的源代码,那么你就可以进行一大堆黑盒子的调查。
所以,不要这样做。除非您正在编写测试工具或进行一些高级调试。它非常有用。
如果你想去那里,@ simple_code提到了Aspects库,这是一个很好的起点。由于您不知道将要接收的内容的类型,您可能需要使用isKindOfClass:
进行某种类型的消歧,但是,再次沿着这条道路向您展示越来越多的内容依赖框架的实现细节(不仅仅是界面)不会改变。