objc_object & objc_class的区别
objc_object对应对象,是对象在底层的的数据结构。objc_class对应类,是类在底层的数据结构id为objc_object指针的别名
typedef struct objc_object *id;`
复制代码
class为objc_class指针的别名
typedef struct objc_class *Class;
复制代码
objc_class继承于objc_object,万物皆对象
struct objc_class : objc_object {
复制代码
isa
源码分析
探究objc_object,我们知道objc_object在内存中由isa_t isa和成员变量构成。
查看isa_t的源码
union isa_t {
uintptr_t bits;
private:
Class cls;
public:
#if defined(ISA_BITFIELD)
struct {
ISA_BITFIELD; // defined in isa.h
};
#endif
};
复制代码
- isa是个
联合体(共用体) - isa在新版内存优化后,通过
位域的方式,由原来64位单纯作为类指针变为剩余空间可以存放其它信息。例如在x86架构下,中间44位是存放类指针地址,其它为存放了关联对象信息、弱引用、散列表等信息,更大限度的节省内存空间。 - 其中
ISA_MASK作为掩码,在ISA_BITFIELD位域的冗余信息中过滤出shiftcls,类指针的值.
define ISA_MASK 0x00007ffffffffff8ULL
define ISA_BITFIELD
uintptr_t nonpointer : 1;
uintptr_t has_assoc : 1;
uintptr_t has_cxx_dtor : 1;
uintptr_t shiftcls : 44;
uintptr_t magic : 6;
uintptr_t weakly_referenced : 1;
uintptr_t unused : 1;
uintptr_t has_sidetable_rc : 1;
uintptr_t extra_rc : 8
复制代码
我们可以看到他们的流程
喜欢就支持一下吧
相关推荐





















![[桜井宁宁]COS和泉纱雾超可爱写真福利集-一一网](https://www.proyy.com/skycj/data/images/2020-12-13/4d3cf227a85d7e79f5d6b4efb6bde3e8.jpg)

![[桜井宁宁] 爆乳奶牛少女cos写真-一一网](https://www.proyy.com/skycj/data/images/2020-12-13/d40483e126fcf567894e89c65eaca655.jpg)