美文网首页
iOS开发 isa结构分析

iOS开发 isa结构分析

作者: 魔杰西 | 来源:发表于2020-09-10 18:04 被阅读0次

1.什么是isa

isa是一个指针,每个类对象中都有,它指向的是类对象或者该类的内存地址。类信息就存储在当前的isa里面。

2.isa结构分析

先上图:


isa64位图析

上图展示了isa在手机和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

3.其他总结

我们可以通过clang(Clang是一个由Apple主导编写,基于LLVM的C/C++/Objective-C编译器)把目标文件编译成c++文件,指令为clang -rewrite-objc main.m,我们可以在.cpp文件下查看底层源码。
联合体位域的概念意义在于让内存更加优化。
大部分自定义的累都视为nonpointer_isa。
isa关联了calloc出来的指针跟当前类,类信息就存储在当前的isa里面。
xcrun是安装xcode时自带的,在clang基础上进行了封装,更加好用。

相关文章

  • iOS开发 isa结构分析

    1.什么是isa isa是一个指针,每个类对象中都有,它指向的是类对象或者该类的内存地址。类信息就存储在当前的is...

  • isa结构分析

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

  • iOS - Isa结构分析

    本文的主要目的是理解类与isa是如何关联的 首先了解一下OC对象的本质是什么 Clang clang是一个由App...

  • iOS底层之类的结构分析

    从iOS底层之isa结构分析及关联类我们探究了类的实例对象的内存结构,对象指针的首地址存储了isa,也就是存储了类...

  • iOS 类的结构分析(上)

    类的初探 在我们平常的 iOS 开发中,类和对象是出现很高频的名词,在之前的isa 底层结构分析 中介绍了对象,那...

  • iOS 类的结构分析(下)

    在上一篇 iOS 类的结构分析(上) 分析了类的结构、isa 的走位以及类的内存分布(属性列表&实例方法列表),这...

  • iOS底层-isa结构分析

    本位的主要目的是分析isa是什么还有isa的结构。 那么,在介绍isa之前,我们首先必须了解几个概念 LVVM和C...

  • iOS底层isa结构分析

    在介绍正文之前,首先需要理解一个概念:OC对象的本质是什么? OC对象本质 在探索oc对象本质前,先了解一个编译器...

  • Cache_t的结构和原理

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

  • iOS底层之isa走位探索

    前置文章: iOS底层之类的重要组成部分-isa结构体分析 前言 从上篇文章中我们得知对象的isa指针中的shif...

网友评论

      本文标题:iOS开发 isa结构分析

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