Objective c 当我们向id发送消息时会发生什么

Objective c 当我们向id发送消息时会发生什么,objective-c,nsobject,Objective C,Nsobject,正如苹果网站上的文档所说,当我们向扩展NSObject的类变量发送消息时,这意味着我们调用objc_msgSend函数并在类的方法表中查找该方法。如果未找到,它将遍历其超类,直到到达NSObject。 然而,当我们向id发送消息时,它的行为似乎会有所不同,正如本博客所说: 查找所有方法意味着什么? 有人能告诉我细节吗?我似乎误解了运行时查找和编译查找。 在编译过程中,编译器需要的是方法的签名,所以它会根据类类型查找它。向id发送消息意味着编译器应该查找所有存在的方法。 在运行时,运行时所做的是

正如苹果网站上的文档所说,当我们向扩展NSObject的类变量发送消息时,这意味着我们调用objc_msgSend函数并在类的方法表中查找该方法。如果未找到,它将遍历其超类,直到到达NSObject。 然而,当我们向id发送消息时,它的行为似乎会有所不同,正如本博客所说:

查找所有方法意味着什么?
有人能告诉我细节吗?

我似乎误解了运行时查找和编译查找。 在编译过程中,编译器需要的是方法的签名,所以它会根据类类型查找它。向id发送消息意味着编译器应该查找所有存在的方法。
在运行时,运行时所做的是通过类的信息查找imp的实际地址。

似乎我误解了运行时查找和编译查找。 在编译过程中,编译器需要的是方法的签名,所以它会根据类类型查找它。向id发送消息意味着编译器应该查找所有存在的方法。
在运行时,运行时所做的是通过类的信息查找imp的实际地址。

不确定,但java的动态方法查找确定对象的运行时类,并根据对象在该时间点的类调用该方法。我假设obj-c也是这样做的,但我似乎无法在谷歌上快速搜索到任何东西。也许再深入一点?呃,似乎没有人知道得更多?Java是静态的——所有的方法绑定都发生在编译时。Objective-c是动态的-在运行时使用类标识isa指针绑定方法。不确定,但java的动态方法查找确定对象的运行时类,并根据对象在该时间点的类调用该方法。我假设obj-c也是这样做的,但我似乎无法在谷歌上快速搜索到任何东西。也许再深入一点?呃,似乎没有人知道得更多?Java是静态的——所有的方法绑定都发生在编译时。Objective-c是动态的-在运行时使用类标识isa指针绑定方法。