美文网首页
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指针

    RunTime OC是一门动态性比较强的编程语言,和C,C++等语言有很大的不同. OC的动态性是由Runtime...

  • runtime面试复习

    runtime isa指针的含义 分为指针型isa:isa的値代表Class的地址,非指针型isa :isa的値的...

  • iOS 如何获取真正isa指针的地址

    isa指针 从runtime源码来看:runtime源码 arm64 之后instance获取到class的isa...

  • Runtime

    概述 runtime 是什么 isa指针 runtime 怎么添加属性,方法等 runtime 如何实现weak属...

  • iOS runtime 动态方法解析

    表现与应用篇 runtime运行时 isa指针 SEL方法选择器 IMP函数指针 Method方法 runtime...

  • iOS开发 Runtime 流程图

    你了解多少Runtime? isa 指针的理解 实例对象 isa 指向类对象 类对象指 isa 向元类对象 元类对...

  • Runtime的本质1-isa指针的本质

    1. isa指针的本质 在学习Runtime之前首先需要对isa的本质有一定的了解,这样之后学习Runtime会更...

  • Runtime:isa

    Runtime:isa 要想学习Runtime,首先要了解它底层的一些常用数据结构,比如isa指针 在arm64架...

  • RunTime一些相关知识

    一、RunTime的基本数据结构 1、Objc_object 2、objc_class 3、isa指针 a、isa...

  • iOS runtime 方法查找讲解原理,[self class

    iOS runtime 方法查找讲解原理,[self class],[super class] isa 指针: 1...

网友评论

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

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