美文网首页
NSObject是什么?

NSObject是什么?

作者: AntKing | 来源:发表于2019-04-08 10:45 被阅读0次

OC里的祖先NSObject到底是什么东东?

  • 来段代码
int main(int argc, const char * argv[]) {
    @autoreleasepool {
        NSObject *obj = [[NSObject alloc] init];
        // 16个字节
        
        // 获得NSObject实例对象的成员变量所占用的大小 >> 8
        NSLog(@"%zd", class_getInstanceSize([NSObject class]));
        
        // 获得obj指针所指向内存的大小 >> 16
        NSLog(@"%zd", malloc_size((__bridge const void *)obj));
        
        // 什么平台的代码
        // 不同平台支持的代码肯定是不一样
        // Windows、mac、iOS
        // 模拟器(i386)、32bit(armv7)、64bit(arm64)
    }
    return 0;
}

  • 在 command Line Tool 项目中跑起来这段代码
    • 第一个输出是8
    • 第二个输出是16

转成C++看看是什么

  • 在命令行里将这个main.m文件转换成ios平台的cpp文件看看NSObject到底是个什么鬼

    • xcrun -sdk iphoneos clang -arch arm64 -rewrite-objc main.m -o main_fuck.cpp
  • 转换之后,我们可以在cpp文件里看到这个


struct NSObject_IMPL {
    Class isa; // 8个字节
};

// 指针
// typedef struct objc_class *Class;

  • 看重点Class isa; 这个不默认了吧,一个神奇的结构体指针

相关文章

网友评论

      本文标题:NSObject是什么?

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