OC 的本质
我们平时编写的OC 代码 底层实现其实都是C\C++ 代码

- 所以OC 的面向对象都是基于C/C++的数据结构实现的(
结构体
)
OC 文件 编译成 CPP


xcrun -sdk iphonesimulator10.3
是指定设备
如果出现错误image.png
需要去 Xcode 里面 设置下
Xcode -> Preferences.png



设备指定
- 指定真机
xcrun -sdk iphoneos clang -rewrite-objc ViewController.m
- 指定模拟器
xcrun -sdk iphonesimulator clang -rewrite-objc ViewController.m
- 指定SDK版本
xcrun -sdk iphonesimulator10.3 clang -rewrite-objc ViewController.m
指定架构 -arch arm64
xcrun -sdk iphoneos clang -arch arm64 -rewrite-objc main.m -o main-arm64.cpp
NSObject 对象底层
OC 代码
NSObject * obj = [[NSObject alloc]init];
cpp 代码
struct NSObject_IMPL {
Class isa;
};
NSObject 对象底层.png
class_getInstanceSize([NSObject class]);
可以获取对象大小 是个 size_t **8个字节**
//实际返回的大小是 成员变量所占用的大小 不是内存中的大小
- 返回的是对齐过的大小
malloc_size((__bridge const void *)obj);
//NSObject *obj = [[NSObject alloc] init]; 返回指针指向的地址的内存大小
**16个字节**
- 不一样的原因 是内存对齐的原则
- 结构体的最终大小必须是最大成员的大小的倍数 —— 内存对齐原则




网友评论