美文网首页
runtime中objc_object内部结构解析

runtime中objc_object内部结构解析

作者: d5cbd4f07363 | 来源:发表于2019-03-22 09:40 被阅读0次

新版的objc_object中 

struct objc_object {

   isa_t isa;

}

在构建对象时调用alloc方法 会对isa_t赋值

inline void objc_object::initIsa(Class cls,boolnonpointer,boolhasCxxDtor)

 {

        if(!nonpointer) { 

                isa.cls = cls;

 }else{

              isa_t newisa(0);

//#  define ISA_MAGIC_VALUE 0x001d800000000001ULL

               newisa.bits = ISA_MAGIC_VALUE;//现对bits进行初始赋值

               newisa.has_cxx_dtor = hasCxxDtor;

                newisa.shiftcls = (uintptr_t)cls >>3;//走到这一步会根据cls的地址更新bit中的数据(因为isa_t是属于联合体(union)类型)那么指向类的地址就保存到了bits中,在以后想要获取类的地址时可以通过ISA()这个方法进行获取,在objc_object结构体ISA()方法中通过return (Class)(isa.bit & ISA_MASK)进行  位与 运算得到指向类结构体的地址进行操作

#define ISA_MASK 0x00007ffffffffff8ULL

                isa = newisa; 

          }

}

相关文章

  • runtime中objc_object内部结构解析

    新版的objc_object中 struct objc_object { isa_t isa; } 在构建对象时...

  • iOS Runtime 机制

    runtime 基础介绍 Runtime 中 objc_class , objc_object, objc_cat...

  • Runtime-数据结构

    runtime整体数据结构 objc_object 我们平时用的所有对象都是id类型的,在runtime中,id ...

  • Runtime

    OC中的id类型 id的类型定义 struct objc_object在runtime中定义 NSObject底...

  • iOS RunTime

    Runtime 一、数据结构 1、objc_object id = objc_object : isa_t为共用体...

  • iOS底层原理

    Runtime原理 Objective-C runtime机制(1)——基本数据结构:objc_object & ...

  • runtime---数据结构

    数据结构 objc_object objc_class -所有的对象都是id类型的,id类型在runtime中...

  • Runtime相关知识点

    一、数据结构 1.1、objc_object 我们平常用的实例对象都是id类型,对应到runtime 中的objc...

  • Runtime

    1.Runtime基础 1.1 Class, Meta Class,objc_object与id Class 在O...

  • Objective-C runtime机制(1)——基本数据结构

    Objective-C runtime机制(1)——基本数据结构:objc_object & objc_class...

网友评论

      本文标题:runtime中objc_object内部结构解析

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