美文网首页
isa的结构分析

isa的结构分析

作者: 北京_小海 | 来源:发表于2020-09-10 16:02 被阅读0次

首先我们从alloc流程中initInstanceIsa开始方法入手:

上图中不难看出就是isa的一些赋值操作

接下来跟进isa_t:

联合体位域便于优化内存

接下来看看ISA_BITFIELD都包含什么:

手机端和模拟器以及mac的区分

nonpointer:表示是否对 isa 指针开启指针优化 0:纯isa指针,1:不⽌是类对象地址,isa 中包含了类信息、对象的引⽤计数等

has_assoc:关联对象标志位,0没有,1存在

has_cxx_dtor:该对象是否有 C++ 或者 Objc 的析构器,如果有析构函数,则需要做析构逻辑, 

如果没有,则可以更快的释放对象

shiftcls:  存储类指针的值。开启指针优化的情况下,在 arm64 架构中有 33 位⽤来存储类指针。

magic:⽤于调试器判断当前对象是真的对象还是没有初始化的空间

weakly_referenced:志对象是否被指向或者曾经指向⼀个 ARC 的弱变量,没有弱引⽤的对象可以更快释放。

deallocating:标志对象是否正在释放内存

has_sidetable_rc:当对象引⽤技术⼤于 10 时,则需要借⽤该变量存储进位

extra_rc:当表示该对象的引⽤计数值,实际上是引⽤计数值减 1,例如,如果对象的引⽤计数为 10,那么 extra_rc 为 9。如果引⽤计数⼤于 10,

则需要使⽤到下⾯的 has_sidetable_rc。

图像展示更直观:


isa信息读取:

或者直接进行位运算也可以:

解释: 

向右三位是抹去前面三位,向左20位是后面的17位加前面的3位 ,最后向右17位是恢复它的原有位置

相关文章

  • Cache_t的结构和原理

    在之间的文章里我们分析了isa的指向和结构isa结构分析,分析了bits类的结构分析,在这篇文章里,我们来分析ob...

  • iOS - isa的初始化&指向分析

    isa结构及初始化分析 什么是isa,首先我们先看一下isa的结构: 由源码我们可以看出:isa的本质就是一个联合...

  • 类的结构分析

    我们在上一节isa的结构分析分析了isa的结构,我们在创建一个类的时候打印其地址得到的第一个地址就是它的isa地址...

  • isa结构分析

    什么是对象? 为了了解Objective-C类在底层会编译成什么,我们先新建一个类DebugPerson。 测试类...

  • isa结构分析

    isa结构分析 OC对象的本质 clang命令 把oc类编译成c++文件,对象在底层编译成struct 联合体(共...

  • isa结构分析

    OC对象的本质 在一个内中添加一个私有类,在main.m文件中添加一个LGPerson类 使用clang将main...

  • isa结构分析

    在我们iOS开发进行lldb调试的时候,经常会在控制台看到isa的存在,那么本文就来分析一下isa的结构。 在分析...

  • isa结构分析

    背景 书接上回alloc流程图分析中,在最后calloc分配空间,可得到空间的地址,那么calloc中系统是如何分...

  • ISA结构分析

    了解对象 Objective-C是一门面向对象编程语言。对象是什么,我们这篇文章讲的isa和对象又有什么样的关系呢...

  • isa结构分析

    在之前的文章OC对象的alloc过程中,我们探讨了OC对象初始化的主要过程,在第三步,主要是调用 initInst...

网友评论

      本文标题:isa的结构分析

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