NSObject底层实现

struct NSObject_IMPL {
        Class isa;
        };

###class的superclass指针
先通过isa 指针找到实例对象的类,然后在通过superclass指针找到父类


###meta-class对象的superclass指针
类的类方法都储存在原类中,通过原类的superclass指针找到父类的原类调用类方法!
9717104-dfa8457fcfaab808.png
AAE82403-67B1-43D5-BFB9-E93ED0215E2B.png
###isa
指针型isa

非指针型isa
arm 64架构
64个bit

0~15位
第1位 indexed 标志位:0 代表 纯的isa 。1 代表 非纯isa指针
第2位:has_assoc 表示是否有关联对象
第3位:has_cxx_dtor 表示是当前类是否使用C++语言方面内容
剩下的表示当前对象的指针地址
16~35位
剩下的表示当前对象的指针地址
9717104-c41949ff2c95649d.png
image.png
###散列表结构
当object 的引用计数较大时就会 SideTables()存储引用计数
SideTabel结构
1.spinlock_t 自旋锁
2,RefcountMap 引用计数表
3.weak_table_t 弱引用表

使用分离锁增加查找效率

###内存管理方案
TaggedPointer
NONPOINTER_ISA
散列表
    ·弱引用表
    ·引用计数表

猜你喜欢

转载自blog.csdn.net/weixin_34087307/article/details/87469284