正如Apple网站上的文档所说,当我们向扩展NSObject的类变量发送消息时,这意味着我们调用objc_msgSend函数并在类的方法表中查找该方法。如果没有找到,它会通过它的超类直到它到达NSObject。 但是,当我们向id发送消息时它似乎会表现不同,因为这个博客说: http://cocoawithlove.com/2011/06/big-weakness-of-objective-c-weak-typing.html
通过查找所有方法意味着什么? 谁能告诉我细节?
答案 0 :(得分:0)
似乎我误解了运行时查找和编译查找。 在编译期间,编译器需要的是方法的签名,因此它按类类型进行查找。将消息发送到id意味着编译器应该查找所有存在的方法。 在运行时,运行时所做的是通过“类是什么”的信息来查找imp的真实地址。