在 Xcode6 之前,创建一个新工程会在 Supporting files 文件夹下面自动创建一个“工程名-Prefix.pch”文件,也是一个头文件,pch 头文件的内容能被项目中的其他所有源文件共享和访问。是一个预编译文件。从 Xcode6 开始,创建新工程时 Xcode 就没有自动创建 pch 文件了,不过可以自己手动创建,如下所示:

pch 文件的命名一般与工程名相同。苹果之所以在之后的 Xcode 版本中不再自动生成 pch 文件,是因为把大量的头文件和宏定义放到 pch 文件内,导致编译时间过长,去掉它可以加快编译时间以增加用户体验,虽然可能失去了编程的便利性。

创建了 pch 文件之后并不代表就完成了,还需指定预编译相关设置,如下所示:
在工程的TARGETS里边 Building Setting 中搜索Prefix Header,然后把 Precompile Prefix Header 右边的 NO 改为 YES(将Precompile Prefix Header为YES,预编译后的 pch 文件会被缓存起来,可以提高编译速度),修改 pch 文件的路径(相对路径,相对于工程文件位置的路径)。

完成以上步骤后,编译(cmd+B)一下程序即可。

下面来讲讲 pch 文件的作用:

1. 放一些全局的宏

有时候一个宏定义会在多个文件都会出现,为了避免在每个文件中都进行一次宏定义,此时可在 pch 文件中进行宏定义,可作为全局使用。

2. 导入一些全局都需要的头文件,一般开发中放工具类的头文件, 或者分类头文件等

例如有时候需要在多个文件都要导入某头文件,可与宏定义一样,在 pch 文件中声明该头文件。

3. 管理日志输出

日志输出非常耗性能,一般发布的时候不需要日志输出,只有调试的时候才需要。通常在开发中弄一个自己的日志输出,不要系统自带的 NSLog 。

#define FGLog(...) NSLog(__VA_ARGS__)

… 表示能接收任何参数;
VA_ARGS 表示左边 … 的参数会替代到右边NSLog中。,一般双下划线表示系统宏。

(1) 如果不想打印了,直接注释后边的宏

#define FGLog(...) // NSLog(__VA_ARGS__);

(2) 还可以通过一个宏进行条件编译,在调试阶段,Xcode会自动定义一个 DEBUG 宏,利用这个宏,就能进行条件编译。

#ifdef DEBUG  //调试阶段
#define FGLog(...) NSLog(__VA_ARGS__)
#else         //发布阶段
#define FGLog(...)
#endif

默认状态下,直接运行程序都是处理调试阶段,可以通过如下方法实现灵活的软件运行状态转换(默认软件运行在 debug 或者 release 状态):

注意:在pch写的有关 OC 的东西,最好放在 #ifdef OBJC, Xcode 在每个 OC 文件中都定义了这个宏,也就意味着只有 OC 中的文件才拥有这些宏,避免项目中有 C 文件的时候报错。如果在 C 文件中,使用 #import,就会报错,因为 C 文件不能识别 #import,只有 OC 文件才能识别。在 pch 中的东西能被项目中的所有文件共享,C 文件共享 #import 就报错。

IOS 中 pch 文件详解相关推荐

  1. iOS中ImageIO框架详解与应用分析

    2019独角兽企业重金招聘Python工程师标准>>> iOS中ImageIO框架详解与应用分析 一.引言 ImageIO框架提供了读取与写入图片数据的基本方法,使用它可以直接获取到 ...

  2. [置顶] iOS中 支付宝钱包详解/第三方支付

    [置顶] iOS中 支付宝钱包详解/第三方支付 韩俊强的博客 每日更新关注:http://weibo.com/hanjunqiang  新浪微博! 一.在app中成功完成支付宝支付的过程 1.申请支付 ...

  3. Maven中pom文件详解

    在IDE中使用Maven IDE工具 MyEclipse 集成maven插件 Eclipse ​ Eclipse For Java EE IDEA 集成Maven插件 在IDE中 配置Maven 指定 ...

  4. GAZEBO 中 sdf文件详解

    转载自:https://blog.csdn.net/weixin_44900096/article/details/103017522 GAZEBO 中 sdf文件详解 木木木一 2019-11-11 ...

  5. Android 中rc文件详解

    rc文件详解 转载https://www.cnblogs.com/zhougong/p/8889040.html

  6. IOS .pch 文件详解

    在IOS开发的项目中有一个XX_Prefix.pch XX_Prefix.pch:扩展名.pch表示"precompiled header",这是一个你工程要用到的来自于外部框架的 ...

  7. iOS中.pch文件如何使用

    pch 可以用来存储共享信息,比如设备屏幕的宽度,高度.版本号等等 公用信息 Xcode 老版本会自动为我们创建pch文件,新版本开始不自动创建了,如果需要使用可以自己手动创建 创建完成后可以在里面定 ...

  8. (转) eclipse项目中.classpath文件详解

    背景:对于java项目中.classpath文件中的相关定义一直不是很了解,有必要进行深入的学习. 1 前言 在使用eclipse或者myeclipse进行Java项目开发的时候,每个project( ...

  9. Linux中service文件详解

    1. 什么是systemd service systemd service是一种以 .service 结尾的配置文件,是一个专用于 Linux 操作系统的系统与服务管理器.简单来说,用于后台以守护精灵 ...

最新文章

  1. java并发处理时mvel表达式处理慢,一文说清!
  2. sqoop从HDFS导出数据到Mysql,卡在Running job: job_1571036741208_0010不动了,或者map 100% reduce 0%不动了
  3. 我对ThreadLocal的理解
  4. python爬取苏州天气并用excel来保存
  5. 获取页面中超链接数量_微信订阅号自定义菜单添加页面模板使用教程。
  6. CSS3 background-clip属性
  7. 如何做相册_我是如何对2000张照片进行批量套版的
  8. Java基础面试题:AQS组件总结
  9. 190329每日一句
  10. java设计模式--创建模式--单例模式
  11. 英文版 office 中的中文字体
  12. 系统集成项目管理工程师10大管理47个过程域输入输出工具(项目成本管理)
  13. 【delete用法 与 object(对象)的创建】
  14. python tkinter窗口组件Canva
  15. c++语言常量,C++常量(constant)
  16. control reaches end of non-void function
  17. 供应链金融之——预付款融资模式
  18. 12306 APP 同一乘客、同列火车候补订单与硬座的处理规则!
  19. SanDisk Cruzer CZ50 8GB U盘 质量怎样?不行!
  20. sql server 2012服务器安装

热门文章

  1. java八个包装类的名字_Java 提供名为( )的包装类来包装基本数据类型 int 。
  2. MT9818DEMO功能测试数据记录
  3. c语言模板函数调用自定义函数调用,C语言函数的递归和调用
  4. Spring中涉及的设计模式总结
  5. 外贸sns营销方法有哪些步骤?
  6. 期货交易基差(期货基差和价差)
  7. Python游戏引擎开发(六):动画的小小研究
  8. 复试加分政策!准备好这些还有机会逆袭!
  9. 怎样将图片无损放大?图片如何在线无损放大?
  10. jojo第七部dio怎么复活_JOJO:DIO才是第七部的大善人,从未夺人性命