object-对象本质
2018-06-26 本文已影响0人
开发界小学生
NSObject底层实现
struct NSObject_IMPL {
Class isa;
};
``
###class的superclass指针
先通过isa 指针找到实例对象的类,然后在通过superclass指针找到父类
###meta-class对象的superclass指针
类的类方法都储存在原类中,通过原类的superclass指针找到父类的原类调用类方法!
![AAE82403-67B1-43D5-BFB9-E93ED0215E2B.png](https://img.haomeiwen.com/i9717104/dfa8457fcfaab808.png?imageMogr2/auto-orient/strip%7CimageView2/2/w/1240)
###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位
剩下的表示当前对象的指针地址
![image.png](https://img.haomeiwen.com/i9717104/c41949ff2c95649d.png?imageMogr2/auto-orient/strip%7CimageView2/2/w/1240)
###散列表结构
当object 的引用计数较大时就会 SideTables()存储引用计数
SideTabel结构
1.spinlock_t 自旋锁
2,RefcountMap 引用计数表
3.weak_table_t 弱引用表
使用分离锁增加查找效率
###内存管理方案
TaggedPointer
NONPOINTER_ISA
散列表
·弱引用表
·引用计数表