NSObject_底层代码探究_clang

151 阅读1分钟

问题/目标分析

探究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