RunTime
- OC是一门动态性比较强的编程语言,和C,C++等语言有很大的不同.
- OC的动态性是由RuntimeAPI来支撑的.
- Runtime API提供的接口基本都是C语言的,源码有C/C++/汇编语言编写.
编写代码 --> 编译链接 --> 运行.OC语言可以在运行的过程中动态的修改方法实现,动态添加方法实现.
ISA指针
- 在
arm64
架构之前,isa
就是一个普通的指针,存储着Class
、Meta-Class
对象的内存地址 - 从
arm64
架构开始,对isa
进行了优化,变成了一个共用体(union
)结构,还使用位域来存储更多的信息
instance
对象的isa
& ISA_MASK
得到class
对象.
class
对象的isa
& ISA_MASK
得到Meta-class
对象.
isa详解 – 位域
nonpointer
- 0,代表普通的指针,存储着Class、Meta-Class对象的内存地址
- 1,代表优化过,使用位域存储更多的信息
has_assoc
- 是否有设置过关联对象,如果没有,释放时会更快
has_cxx_dtor
- 是否有C++的析构函数(.cxx_destruct),如果没有,释放时会更快
shiftcls
- 存储着Class、Meta-Class对象的内存地址信息
magic
用于在调试时分辨对象是否未完成初始化
weakly_referenced
- 是否有被弱引用指向过,如果没有,释放时会更快
deallocating
- 对象是否正在释放
extra_rc
- 里面存储的值是引用计数器减1
has_sidetable_rc
- 引用计数器是否过大无法存储在isa中
- 如果为1,那么引用计数会存储在一个叫SideTable的类的属性中
Bool类型属性的Getter
@property (nonatomic,assign,getter=isTall) BOOL tall;
通过两次取反!!number 强制转换成Bool类型.
网友评论