2

我正在尝试将一个方法调用动态地转换为另一个方法调用(在运行时)。

例如,我想要以下内容:

[obj foo]

委托给:

[obj getAttribute: @"foo"]

(我想动态地执行此操作,因为我不提前知道这些方法名称或属性将是什么)。

我看到有一个钩子:

 - (id) forwardingTargetForSelector: (SEL) aSelector

不过,这似乎只适用于委派,我想将对象保持为“自我”并转换方法参数。

我应该在哪里寻找这种行为?在obj-c中甚至可能吗?

4

1 回答 1

6

您可以使用该方法-forwardInvocation:。它需要一个NSInvocation代表方法调用的完整对象,您可以随意处理它。如果您这样做,您还应该覆盖-methodSignatureForSelector:以返回正确的NSMethodSignature-forwardInvocation:在未知选择器上工作所必需的)。还建议您重写-respondsToSelector:以声明您可以处理有问题的选择器。

于 2011-01-07T22:29:46.773 回答