【问题标题】:method_missing-like functionality in objective-c (i.e. dynamic delegation at run time)Objective-c 中的类似 method_missing 的功能(即运行时的动态委托)
【发布时间】:2011-06-05 13:44:33
【问题描述】:

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

例如,我想要以下内容:

[obj foo]

委托给:

[obj getAttribute: @"foo"]

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

我看到有一个钩子:

 - (id) forwardingTargetForSelector: (SEL) aSelector

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

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

【问题讨论】:

标签: iphone objective-c reflection dynamic delegation


【解决方案1】:

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

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-04-04
    相关资源
    最近更新 更多