美文网首页
RunTime --> ISA指针

RunTime --> ISA指针

作者: 曹来东 | 来源:发表于2018-09-04 11:46 被阅读20次

    RunTime

    • OC是一门动态性比较强的编程语言,和C,C++等语言有很大的不同.
    • OC的动态性是由RuntimeAPI来支撑的.
    • Runtime API提供的接口基本都是C语言的,源码有C/C++/汇编语言编写.
      编写代码 --> 编译链接 --> 运行.OC语言可以在运行的过程中动态的修改方法实现,动态添加方法实现.

    ISA指针

    • arm64架构之前,isa就是一个普通的指针,存储着ClassMeta-Class对象的内存地址
    • arm64架构开始,对isa进行了优化,变成了一个共用体(union)结构,还使用位域来存储更多的信息

    instance对象的isa & ISA_MASK得到class对象.
    class对象的isa & ISA_MASK得到Meta-class对象.

    image.png

    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类型.

    相关文章

      网友评论

          本文标题:RunTime --> ISA指针

          本文链接:https://www.haomeiwen.com/subject/hwawwftx.html