"self.class" 和 "object_getClass" 为什么不同?

"self.class" 和 "object_getClass" 为什么不同最近看到很多人对 "self.class" 的解释是,"如果是实例的时候,返回类对象,否则返回自身。" 这种说法,含糊不清,缺少背景上下文,也经不起推敲。这个类对象是什么?这个否则返回自身的情况又是如何? Objective-C 的面向对象首先我们简单了解一下,在 Objective-C 中,所有的实例对象都通过实现对应的类来完成,类对象为实例推向提供了实例方法,实例属性的模板,可以说类是对象的模板。 那么又是什么来描述类对象呢? 元类。 Objective-C 通过元类来描述类对象,元类其实和类一样,只是用途不同,可以通过 class_isMetaClass() 来判断是否为元类。元类中存储了类方法的信息,元类是类的模板。 Objective-C 中,实例,类,元类,都是对象,都是结构体的形式存在,在逻辑上分别代表了 OOP 中的不同层级。 object_…

源码解析 objc_msgSend 消息发送

源码解析 objc_msgSend 消息发送objc_msgSend从 objc-msg-arm64.s 汇编文件中找到 objc_msgSend 的汇编实现,我们可以看到 objc_msgSend 的汇编符号 _objc_msgSend #define NORMAL 0 #define GETIMP 1 #define LOOKUP 2 ENTRY _objc_msgSend UNWIND _objc_msgSend, NoFrame cmp p0, #0 // nil check and tagged pointer check #if SUPPORT_TAGGED_POINTERS b.le LNilOrTagged // (MSB…