gpt4 book ai didi

objective-c - forwardInvocation : get called?如何

转载 作者:太空狗 更新时间:2023-10-30 03:48:01 26 4
gpt4 key购买 nike

仅查看 Objective-C 运行时库,当消息发送到不响应它的对象时,运行时系统会为接收方提供另一个机会来处理该消息。因此,接收方的 forward:: 方法(如果已实现)将被调用。然而,看着NSObject.mm , NSObject 似乎没有实现 forward::

那么,NSObjectforwardInvocation: 方法是如何被调用的,因为运行时系统在需要转发时唯一调用的是 forward::? Foundation 是否使用 objc_setForwardHandler ( runtime.h ) 来设置调用 forwardInvocation: 的新处理程序,只要发送到 NSObject 对象的消息需要转发?

最佳答案

很久以前的某个时候,Objective-C 运行时中没有NSObject。当 Brad Cox 和 Tom Love 首次创建该语言时,他们添加了一个名为 Object 的根对象类。这实现了 [Object forward::] ,用于进行消息转发。

几年后,NextStep 出现并对该语言进行了自己的添加,创建了 OpenStep 框架(后来成为 Cocoa)。 NextStep 去掉了 Object 类,并将其替换为 NSObject。其中一项更改是用 forwardInvocation 替换 forward:: 方法。 Object 类仍在源代码中出现(如您所见),但我很确定它在 iOS 或 64 位 OS X 应用程序中不可用。

您建议使用 objc_setForwardHandler 来指示应该使用 forwardInvocation 而不是 forward:: 对于所有 是正确的NSObjects。恐怕我不确定 Foundation 何时调用它...我会猜测 NSObject 初始化。我也不太了解底层的运行时实现,但希望这至少对一些有帮助?

关于objective-c - forwardInvocation : get called?如何,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15178395/

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