gpt4 book ai didi

objective-c - 参数数量未知的 resolveInstanceMethod

转载 作者:搜寻专家 更新时间:2023-10-30 20:02:46 26 4
gpt4 key购买 nike

上下文:

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

它允许使用定义组件的接口(interface)在运行时解析它们——使用 resolveInstanceMethod 和 implentationWithBlock 将请求发送到 DI 容器。

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

[assembly dangerousEnemyWithWeapon:id<BigGun>]

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

问题:

是否可以使用 resolveInstanceMethod 来定义参数数量事先未知的实现?

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

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

最佳答案

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

如果您实现 -forwardInvocation:-methodSignatureForSelector:,那么您将获得一个 NSInvocation 对象。这已经是参数(和返回值)的包装。您可以按原样使用它,也可以询问它以解压缩参数并按照您的需要重新打包它们。

关于objective-c - 参数数量未知的 resolveInstanceMethod,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/18266663/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com