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

时间:2012-02-15 15:26:21

标签: objective-c nsobject

正如Apple网站上的文档所说,当我们向扩展NSObject的类变量发送消息时,这意味着我们调用objc_msgSend函数并在类的方法表中查找该方法。如果没有找到,它会通过它的超类直到它到达NSObject。 但是,当我们向id发送消息时它似乎会表现不同,因为这个博客说: http://cocoawithlove.com/2011/06/big-weakness-of-objective-c-weak-typing.html

通过查找所有方法意味着什么? 谁能告诉我细节?

1 个答案:

答案 0 :(得分:0)

似乎我误解了运行时查找和编译查找。 在编译期间,编译器需要的是方法的签名,因此它按类类型进行查找。将消息发送到id意味着编译器应该查找所有存在的方法。 在运行时,运行时所做的是通过“类是什么”的信息来查找imp的真实地址。