Xcode工程模块化
工程化的最大需求就是模块解耦,最近在整理一个旧工程,各种乱七八糟的引用关系不敢乱删,有复习了下大学学的编译过程,找到了一一对应,最终把一个大工程拆成了几个独立的Project。
Xcode和编译过程的对应关系
面试的时候被好多人问过编译过程分哪几步,好多人会被问懵逼。。。这里简单提示一下
中文 | 预编译 | 编译 | 汇编 | 链接 |
---|---|---|---|---|
英文 | Preprocess | Compile | Assembling | Link |
作用 | 处理文字 | 变汇编 | 转换成机器码 | 变可执行程序 |
根据Wiki百科解释,编译是将人能读懂的Source Code变成机器能理解的汇编语言(寄存器指令),然后通过汇编变成目标机器的(Machine Code/Object Code),然后通过Link变为可执行程序的01010101….
Xcode头文件(预编译)
对于计算机来讲,头文件是不需要的
对于Xcode来说仅仅在 预编译 和 编译 阶段需要头文件来进行静态检查是否存在有不知道的类或者方法
头文件的搜索目录可以通过配置Build Setting里的 Header Search Paths 来获取头文件,这个是磁盘目录,可以是电脑上的任意目录,无需添加任何文件进入Target
Xcode Symbols(编译,汇编)
把每一个文件中的可执行代码进行 编译和汇编 可以得到 同名的.o文件, 其后缀o就是指的 Object Code
之所以称为Object,是因为不同的硬件有不同的架构,如x86和arm64,例如iPhone模拟器是x86而iPhone真机大部分都是arm的,也就是说在此时Xcode已经完成了架构的处理
Xcode Link(链接)
最终Xcode经过链接过程将.o文件组合起来,得到一个Mach-O文件(相当于一个压缩包) 并且生成 符号表
这个过程中存在两个常见的错误提示 Undefined symbols 和 Duplicated symbols 将在后续讲解
Mach-O文件是Macintosh系统中的一个文件类型,用来描述程序的运行和二进制代码之间的关系