3

语境:

我有一个依赖注入容器 - www.typhoonframework.org

它允许使用定义组件的接口在运行时解析它们 - 使用 resolveInstanceMethod 和 implentationWithBlock 将请求蹦到 DI 容器。

用户一直要求在运行时提供一些参数。例如:

[assembly dangerousEnemyWithWeapon:id<BigGun>]

. . 敌人是从 DI 容器中的协作类组装而成的,但枪是在运行时提供的。. .

问题:

是否可以使用 resolveInstanceMethod 来定义预先不知道参数数量的实现?

我想打包这些论点,并将它们转发给另一个响应者。

参数可以按顺序打包或添加到字典中,匹配的选择器部分作为键。

4

1 回答 1

5

您不能+resolveInstanceMethod:为此使用,但可以使用传统转发。+resolveInstanceMethod:只需使用 Objective-C 运行时在类上安装一个新的实例方法。你不会影响它的调用方式。它将像任何其他方法一样被调用,参数在寄存器和堆栈中,因为调用者提供了它们。您没有机会打包或编组参数。

如果你实现-forwardInvocation:and -methodSignatureForSelector:,那么你会得到一个NSInvocation对象。这已经是参数(和返回值)的包装。您可以按原样使用它或询问它来解包参数并根据需要重新打包它们。

于 2013-08-16T06:02:34.737 回答