1.首先编译器会将代码[receiver message];
2.转化为objc_msgSend(receiver, @selector (message));,
3.在objc_msgSend函数中,首先通过obj的isa指针找到obj对应的class。
4.在Class中先去cache中 通过SEL查找对应函数method,若 cache中未找到。
5.再去类的分派表中查找,若分派表中未找到,则取superClass中查找,如此一致回溯至NSObject类。
6.若能找到,则将method加入到cache中,以方便下次查找,并跳转到对应的函数中去执行。
本文深入探讨了Objective-C的消息传递机制,详细解释了编译器如何将代码转化为objc_msgSend调用,以及运行时如何查找并执行相应的方法。从isa指针到类的分派表,再到superClass的回溯,直至NSObject类,全面揭示了Objective-C动态性的核心秘密。
578

被折叠的 条评论
为什么被折叠?



