美文网首页
OC 对象的底层本质

OC 对象的底层本质

作者: 化二缺 | 来源:发表于2020-04-26 15:17 被阅读0次

OC 的本质

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


image.png
  • 所以OC 的面向对象都是基于C/C++的数据结构实现的(结构体)

OC 文件 编译成 CPP

第一步.png
第二步.png

xcrun -sdk iphonesimulator10.3 是指定设备
如果出现错误

image.png
需要去 Xcode 里面 设置下
Xcode -> Preferences.png
第三步.png Cpp代码.png OC 代码.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个字节**
  • 不一样的原因 是内存对齐的原则
  • 结构体的最终大小必须是最大成员的大小的倍数 —— 内存对齐原则
内存分配最少16个字节.png image.png image.png image.png

相关文章

网友评论

      本文标题:OC 对象的底层本质

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