MJ底层课总结-NSObject的内存本质

1. Objective-C代码,底层实现其实都是C\C++代码。转换流程如下:

image.png

2. Objective-C的对象、类主要是基于C\C++的什么数据结构实现的?

结构体

3. 将Objective-C代码转换为C\C++代码的方法如下:

xcrun -sdk iphoneos clang -arch arm64 -rewrite-objc OC源文件 -o xxx.cpp

比如将main.m转换成C++代码:
image.png
image.png
业务代码在生成的main.cpp的最底部:
image.png

4. 一个OC对象在内存中是如何布局的?

  1. 首先在Xcode中查看NSObject的实现,如下:

image.png
去除宏以后如下:

@interface NSObject {
    Class isa;
}
复制代码
  1. 然后在生成的源码main.cpp中,可以找到NSObject_IMPL的结构体

image.png
NSObject_IMPL的意思大概可以理解为:NSObject Implementation,NSObject的实现

  1. 所以我们可以理解成,NSObject最终转换成了C++中的结构体:

image.png

  1. 创建一个NSObject对象时的内存分配则如下图所示:

image.png

© 版权声明
THE END
喜欢就支持一下吧
点赞0 分享