OC学习11:Pch文件

张建 lol

什么是 Pch?

pch 文件是一个标准的 预编译头文件(Pre-Compiled Header),在 Xcode6 之前的版本中,系统模板会在 Supporting Files文件夹 自动创建。但在 Xcode6 之后的版本中取消了这一文件,如果我们需要使用 pch 文件,则需要 手动创建

去掉的原因:

1、去掉自动导入的系统框架类库的头文件,可以提高原文件的复用性,便于迁移。
2、一个体积大的 Prefix Header 会大大增加编译时间。

Pch 有什么作用?

  • 存放一些 全局的宏(整个项目中都用的上的宏)

  • 用来包含一些 全局头文件(整个项目中都用得上的头文件)

  • 能自动打开或者关闭日志输出功能

Pch 缺点?

如果你的pch文件确实很大,那那肯定影响编译速度,苹果去掉他可能是要加快编译时间增加用户体验。虽然失去了编程的便利性。事实上,正确运用pch文件时预编译后的头文件会被缓存起来,再次编译的时候就不需要重新编译pch文件中导入的内容,编译速度并不会降低很多。很重要的一点就是pch文件确实给我们编程带来便利,我们不用在每个文件内重复引用另一个文件;那怎样才能提高编译速度呢?降低编译速度的罪魁祸首就是大量的共用性不高的宏定义和头文件的引入。编译的时候整个工程范围地查找和替换这些宏定义字段,重复导入这些头文件,不慢就奇怪了。

Pch 使用

  1. 创建 .pch 文件
  • File -> New -> File… 或 Command + N

  • 命名一个名字,然后点击 Create,就生成好了 pch 文件

  1. 配置文件路径

创建好了 pch 文件,但并不代表现在就能用了,还需要给 pch文件 配置路径

  • Precompile Prefix HeaderYES,这样的话 pch会被预编译,预编译后的pch文件会被 缓存起来,从而提高编译速度。当 Precompile Prefix HeaderNO 时,那么 pch不会被预编译,而是在每一个用到它导入的框架类库的 .m 文件中编译一次

  • Prefix Header 设置路径,只需要点击pch文件然后按住鼠标左键拖过来就行,但是 /Users/mac/Desktop/OC学习/OC面试重点/Pch/Pch/PrefixHeader.pch 代表的是 绝对路径,当用别的电脑时就不能识别了,这时就可以用到 $(SRCROOT) 来替换 ,在iOS中 $(SRCROOT) 代表的是 项目根目录 下,路径形式为:$(SRCROOT)/当前工程名字/需要包含头文件所在文件夹,所以把路径改为 $(SRCROOT)/Pch/PrefixHeader.pch

注:
$(SRCROOT) :项目根目录

  1. 使用
  • 一般会在 pch 文件下添加全局的头文件前,添加如下代码
1
2
3
4
5
6
7
8
9
10
11
12
#ifndef PrefixHeader_pch
#define PrefixHeader_pch

// 判断一下,将OC头文件和C语言的源文件有效隔离,把OC头文件只拷贝到OC的源文件中
#ifdef __OBJC__

在这里引入全局的头文件

// OC文件判断结束
#endif

#endif /* PrefixHeader_pch */
  • 这个宏定义的作用是 保证只有oc文件可以调用pch里面的头文件,一些非OC语言不能调用,比如 .cpp,.mm。如果不加入,那么如果代码中带有 .cpp,.mm 文件,那么将报错。

  • NSObjCRuntime.h、NSObject.h、NSZone.h 将会报出编译异常。

  • 这样你就可以在pch文件当中添加一些常用头文件、宏定义了,在编程过程中非常方便!!

  • Post title:OC学习11:Pch文件
  • Post author:张建
  • Create time:2023-03-08 19:43:38
  • Post link:https://redefine.ohevan.com/2023/03/08/OC/OC学习09:Pch文件/
  • Copyright Notice:All articles in this blog are licensed under BY-NC-SA unless stating additionally.