smt*_*ire 1 iphone reflection delegation dynamic objective-c
我正在尝试动态地(在运行时)将一个方法调用转换为另一个方法调用.
例如,我想要以下内容:
[obj foo]
Run Code Online (Sandbox Code Playgroud)
委托:
[obj getAttribute: @"foo"]
Run Code Online (Sandbox Code Playgroud)
(我想动态地这样做,因为我事先不知道这些方法名称或属性是什么).
我看到有一个钩子:
- (id) forwardingTargetForSelector: (SEL) aSelector
Run Code Online (Sandbox Code Playgroud)
但是,这似乎只适用于委托,我希望将对象保持为"self"并转换方法参数.
我应该在哪里寻找这种行为?在obj-c中甚至可能吗?
您可以使用该方法-forwardInvocation:.它需要一个NSInvocation表示方法调用的完整对象,您可以根据需要处理它.如果这样做,您还应该覆盖-methodSignatureForSelector:以返回正确的NSMethodSignature(-forwardInvocation:处理未知选择器所需的).还建议您覆盖-respondsToSelector:以声明您可以处理有问题的选择器.
| 归档时间: |
|
| 查看次数: |
851 次 |
| 最近记录: |