1. Objective-C代码,底层实现其实都是C\C++代码。转换流程如下:
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++代码:
业务代码在生成的main.cpp的最底部:
4. 一个OC对象在内存中是如何布局的?
- 首先在Xcode中查看NSObject的实现,如下:
去除宏以后如下:
@interface NSObject {
Class isa;
}
复制代码
- 然后在生成的源码main.cpp中,可以找到NSObject_IMPL的结构体
NSObject_IMPL的意思大概可以理解为:NSObject Implementation,NSObject的实现
- 所以我们可以理解成,NSObject最终转换成了C++中的结构体:
- 创建一个NSObject对象时的内存分配则如下图所示:
© 版权声明
文章版权归作者所有,未经允许请勿转载。
THE END