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; 这个不默认了吧,一个神奇的结构体指针
网友评论