如果我们想知道对象到底是如果工作的,那一定一定是要看源码的,所以要准备源码资料如下
源码
命令行
另外,只准备源码探究可能还不是那么清晰,我们可以将oc源码编译成c++代码进行分析 有助于我们更好的理解OC的底层实现,所以准备了几个常用命令
//编译main为test.c++文件
clang -rewrite-objc main.m -o test.c++
xcrun -sdk iphoneos clang -arch64 -rewrite-objc main.m -o testMain.c++
clang 命令参数
-x 编译语言比如objective-c
-arch 编译的架构,比如arm7
-f 以-f开头的。
-W 以-W开头的,可以通过这些定制编译警告
-D 以-D开头的,指的是预编译宏,通过这些宏可以实现条件编译
-iPhoneSimulator11.1.sdk 编译采用的iOS SDK版本
-I 把编译信息写入指定的辅助文件
-F 需要的Framework
-c 标识符指明需要运行预处理器,语法分析,类型检查,LLVM生成优化以及汇编代码生成.o文件
-o 编译结果
LLDB命令
以16进制的方式打印 object 的 4 段内存区域的地址,每一段是 8 个字节大小,如果想打印5段,更改数字4即可,以此类推
x/4gx object
直接打印值
p
打印object
po object
二进制打印一个地址的
p/t 0x001d800100001302
八进制打印一个地址的
p/o 0x001d800100001302
十进制打印一个地址的
p/d 0x001d800100001302
十六进制进制打印一个地址的
p/x 0x001d800100001302
参考博客:LLDB常用命令