- 有时候查看OC中C语言的源码是很有必要的,这会帮助我们了解更为底层的实现,只有弄懂了原理这些东西才是我们自己的
- clang(LLVM编译器)具有转换为我们可读源代码的功能,可以将OC转换为C++的源代码
而C++,其实也仅是使用struct结构,其本质是C语言源代码
- 如果你想要更好的了解iOS编译Clang LLVM, 请点击查看
下面我们以看查看Block源码为例
- 使用的是Vim编辑器来测试的哈
- 打开vim建立.c文件:vim testBlockVim.c
- 写入测试Block源码的代码:
#include <stdio.h>
int main () {
void(^blk)(void) = ^{
printf("Block\n");
};
blk();
return 0;
}
- 编译:gcc testBlockVim.c
如果编辑成功恭喜你,很久没写C代码都可以一次通过
- 使用clang查看Block语法源码:clang -rewrite-objc testBlockVim.c
其实就是语句:clang -rewrite-objc 源代码文件名
- 没有任何反应是vim编辑器最好的反应吧,我们打开自己建立文件夹的地方,可以看到如下图:

- 多了一个testBlockVim.cpp的文件,我们看到这个文件,看到的是非常多的代码,如下图:
.cpp:只能编译C++代码的意思,我们的.mm是编译:C,OC,C++,.h是声明,.m是包含OC和C代码的文件

- 可能太多了,所以我们可以使用command+f查看impl实现会少很多吧!理解一下应该看可以如下图实现的Block:
最后的时候其实就在代码的最后,只是第一张图片结构体的申明在前面


- 同时vim不好用我们可以使用Xcode建立c代码或者直接在iOS开发建立C文件测试,不过这样可是编译不过的哈,涉及到有int main的时候
- 希望你还没有忘记xcode如何建立C项目,打开xcode->File->new->project->选择macOS的Command Line Tool->next下一步的时候要选择语言为C哈:

- 如果不会的学会了可以给我一个喜欢哦,如果这样会激发你看OC实现的源代码那就是最好的了
网友评论