问题/目标分析
探究objc底层具体实现。
方法分析
使用clang 方法,编译objc代码,探究实现。
实验步骤
1、main.m文件修改,添加要测试的类。
#import "BLTest.h"
int main(int argc, char * argv[]) {
BLTest * te = [[BLTest alloc] init];
}
2、通过终端进入文件夹,编译main.m 为main.cpp


3、打开cpp文件,查看c++代码。

4、找到自己定义的类型
BLTest,可以看到底层转换为struct类型,main函数中的相关的方法调用alloc,init也都可以看到。
结果分析
通过clang的编译,可以看到底层代码实际上的结构。 找到自己需要看到的底层代码实现。
总结实验
clang是个好工具。
扩展 去掉 编译时的警告(由于oc与c之间的转换造成的,需要将oc的特性编译到c)
xcrun -sdk iphoneos clang -arch arm64 -rewrite-objc main.m -o testMain.c++
xcrun -sdk iphoneosimulatero clang -rewrite-objc main.m
xcrun -sdk iphoneos clang -rewrite-objc main.m
解决添加了uikit 不能编译的问题。
clang -x objcetive-c -rewrite-objc -isysroot /Applications/Xcode.app/Contents/Developer/Platforms/IphoneSimulator.platform/Dveloper/SDKs/iPhoneSimulator.sdk Viewcontroller.m