iOS底层探索-准备工作

982 阅读2分钟

如果我们想知道对象到底是如果工作的,那一定一定是要看源码的,所以要准备源码资料如下

源码

Apple source源码下载

Cooci大神配置源码

命令行

另外,只准备源码探究可能还不是那么清晰,我们可以将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常用命令