美文网首页
OC_底层_isa探究

OC_底层_isa探究

作者: nicedayCoco | 来源:发表于2020-09-11 12:16 被阅读0次

    isa与类关联的原理

    OC对象的本质

    先简单简介llbd相关知识:

    lldb

    在代码中探索对象本质:

    @interface LGPerson : NSObject
    @property (nonatomic, copy) NSString *name;
    @end
    
    @implementation LGPerson
    @end
    
    //1、将 main.m 编译成 main.cpp
    clang -rewrite-objc main.m -o main.cpp
    
    //2、将 ViewController.m 编译成  ViewController.cpp
    clang -rewrite-objc -fobjc-arc -fobjc-runtime=ios-13.0.0 -isysroot / /Applications/Xcode.app/Contents/Developer/Platforms/iPhoneSimulator.platform/Developer/SDKs/iPhoneSimulator13.7.sdk ViewController.m
    
    //以下两种方式是通过指定架构模式的命令行,使用xcode工具 xcrun
    //3、模拟器文件编译
    - xcrun -sdk iphonesimulator clang -arch arm64 -rewrite-objc main.m -o main-arm64.cpp 
    
    //4、真机文件编译
    - xcrun -sdk iphoneos clang -arch arm64 -rewrite-objc main.m -o main- arm64.cpp 
    

    在 main.cpp 中:

    //NSObject的定义
    @interface NSObject <NSObject> {
        Class isa  OBJC_ISA_AVAILABILITY;
    }
    
    //NSObject 的底层编译
    struct NSObject_IMPL {
        Class isa;
    };
    
    //LGPerson的底层编译
    struct LGPerson_IMPL {
        struct NSObject_IMPL NSObject_IVARS; // 等效于 Class isa;
        NSString *_name;
    };
    

    OC对象的本质其实就是结构体`

    LGPerson中的isa是继承自NSObject中的isa

    objc_setProperty 源码探索

    img img img

    总结 :

    img

    联合体(union)

    结构体和联合体的区别

    内存占用情况

    • 结构体的各个成员会占用不同的内存,互相之间没有影响
    • 共用体的所有成员占用同一段内存,修改一个成员会影响其余所有成员

    内存分配大小

    • 结构体内存 >= 所有成员占用的内存总和(成员之间可能会有缝隙)
    • 共用体占用的内存等于最大的成员占用的内存

    isa的类型 isa_t

    union isa_t { //联合体
        isa_t() { }
        isa_t(uintptr_t value) : bits(value) { }
        //提供了cls 和 bits ,两者是互斥关系
        Class cls;
        uintptr_t bits;
    #if defined(ISA_BITFIELD)
        struct {
            ISA_BITFIELD;  // defined in isa.h
        };
    #endif
    };
    

    isa 中 存储信息如下:

    img

    验证 isa 指针 位域 (0-64)

    isa 和 类 的关联

    验证方式:

    initIsa 方法
    isa & ISA_MSAK
    object_getClass
    位运算

    本文参考
    Style_月月
    链接:https://www.jianshu.com/p/7fd6241a7124

    相关文章

      网友评论

          本文标题:OC_底层_isa探究

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