Xcode6 之前会在 Supporting Files 文件夹下自动生成一个“工程名-PrefixHeader.pch”的预编译头文件,pch 头文件的内容能被项目中的其他所有源文件共享和访问。Xcode 6.0之后则需要手动创建。

一、作用

①、定义全局性宏;

②、引用全局性头文件;

③、根据运行环境,自动打开或者关闭日志输出功能。

二、优点

①、PCH 文件的内容能被项目中的其他所有文件共享和访问,其它地方可直接使用,不用再手动重复定义或引用;

②、预编译后的头文件会被缓存起来,再次编译时不需要重新编译 PCH 文件中导入的内容,从而提高编译速度。

三、缺点

①、把类中使用的框架等放到 PCH 中,依赖关系不明确,不利于代码的迁移和解耦,降低了代码的可移植性和复用性。

②、大量的共用性不高的宏定义和头文件引入,会导致编译时整个工程范围地查找和替换这些宏定义字段,或重复导入这些头文件,造成时间过长;

四、思考

①、PCH 的目的是:提高编译速度,而不是少敲几行 #import;

②、造成这些问题的原因在于对 PCH 文件的使用方式和方法不对。要正确、适度的使用 PCH 文件,不要滥用;

③、可以考虑按照层级或者功能模块等方式,定义多个头文件。将该层级或者模块共用性较高的宏或文件写入,供本层使用。如果整个工程需要使用,再导入 PCH 文件。这样既可以避免或减少同一个且多余的文件被重复编译,增加编译时间,又可以方便地使用一些全局的东西。

④、关于宏定义:宏定义是在预编译的时候处理的。因此,当你修改宏定义的时候会导致大量的代码被重新编译。另外,宏定义存在许多潜在的 bug 是因为在预编译的时候,它并不会被发觉到。替代宏定义,可以考虑使用常量 const。

⑤、关于引用:iOS7 之后,系统的 Module 都可以被 "semantic import"。把原来的 #import 换成 @import 即可。比如:#import 换成 @import Foundation; 即可。编译器遇到 @import 时,会将预编译好的 framework 载入,同时也不需要到 project settings 里添加 framework,系统做这些事情。这些 Module 只会编译一次。

⑥、如果不使用 pch,可以使用继承处理公用的宏、框架和三方库。在父类的头文件中定义宏和导入共用框架、三方库,需要用到的去继承。

⑦、宏、框架和三方库共用性高不高有时候很难去界定和把握,就会造成纠结状态,干脆尽量不用了。

五、文章

PCH 文件的优缺点

PCH文件的新建和其缺点

iOS pch的更多相关文章

  1. iOS PCH文件

    在Xcode6之前,创建一个新的工程,Xcode会再Support Files文件夹下自动创建一个"工程名 - prefix.pch"文件,也是一个头文件,pch文件的内容能被项目 ...

  2. iOS .pch文件的使用

    什么是.pch文件预编译头文件(一般扩展名为.PCH),是把一个工程中较稳定的代码预先编译好放在一个文件(.PCH)里.这些预先编译好的代码可以是任何的C/C++代码--甚至可以是inline函数,只 ...

  3. iOS pch文件创建使用,和info.plis文件路径改变,路径的设置

    一 路径报错: 二 pch创建设置: 一:如果要更改Info.plist与Prefix.pch文件实际路径,也就是实际文件的位置(不是在工程中的组织路径),需要到Build Settings中修改对应 ...

  4. iOS pch文件的创建

    3.iso pch头文件的创建  输入文件名的时候记得打钩 3.1.在Build Settings 里搜索pref就能找到preflx, 点击设置相对路径 $(SRCROOT) +路径:成功了就会显示 ...

  5. 【原】iOS学习之PCH文件

    1. PCH文件概述 PCH文件是一种预编译头文件(一般扩展名为.PCH),是把一个工程中较稳定的代码预先编译好放在一个文件(.PCH)里.这些预先编译好的代码可以是任何的C/C++代码--甚至可以是 ...

  6. IOS Xcode7 新建PCH文件

    第一步:新建文件找到iOS中的Othere点击PCH File 点击Next 第二步:修改文件名为当前工程名(一般与工程名同名),勾选Targets,点击create创建 第三步:如图选中红框中的路径 ...

  7. iOS 如何给Xcode7项目添加“.pch”文件

    1.首先打开你的项目(演示使用一个空的项目),按照以下步骤即可 找到“Supporting Files”文件夹,右键即可看到下图,选择“New File...” 2.选择"iOS" ...

  8. iOS开发- Xcode 7添加pch文件

    1.打开你的Xcode工程. 在Supporting Files目录下,选择 File > New > File > iOS > Other > PCH File 然后点 ...

  9. ios开发 <AppName>-Prefix.pch文件的用法详解

    我们知道,每新建立一个工程,比如说HelloWord,在分类SupportingFiles里都会有一个以工程名开头-Prefix.pch结尾的文件,如HelloWord-Prefix.pch.对于这个 ...

随机推荐

  1. 正式学习MVC 02

    1.cookie 继续讲解MVC的内置对象cookie 相对不安全 1)保存cookie public ActionResult Index() { // 设置cookie以及过期时间 Respons ...

  2. 合并.ts文件 无需软件

    cmd 命令直接输入: copy /b D:\temp\*.ts D:\new.ts D盘temp目录的ts文件 合并 并输出到 D盘 new.ts文件

  3. JZOJ 4298. 【NOIP2015模拟11.2晚】我的天

    4298. [NOIP2015模拟11.2晚]我的天 (File IO): input:ohmygod.in output:ohmygod.out Time Limits: 1000 ms Memor ...

  4. 适合MCU用的C语言快速互转HEX(16进制)和原始字符串/数组方法

    缘由 这个起因是昨晚群里有人在讨论怎么把字符串转成HEX方法最佳,讨论到最后变成哪种方法效率最优了.毕竟这代码是要在MCU上面跑的,要同时考虑到时间和空间的最优解. 当然讨论的是有结果的,具体实现的方 ...

  5. nginx显示静态html爆502 bad gateway的错误提示

    在centos的服务器上,没有启动php-fcgi. 本来是想设置显示一个静态文件目录的,用不着php,于是就关闭了php-fcgi. 结果打开爆了一个大大的nginx502 bad gateway的 ...

  6. linux4.1.36 2440 启用 RTC 支持

    /drivers/rtc/rtc-s3c.c822行static struct platform_driver s3c_rtc_driver = {    .probe        = s3c_rt ...

  7. JVM02——JVM运行时内存

    在上一篇文章中,我们介绍了 JVM 的内存区域,本文我们将继续围绕 JVM 展开话题,介绍 JVM 运行时内存.关注我的公众号「Java面典」了解更多 Java 相关知识点. Java 堆从 GC 的 ...

  8. RStudio终端操作

    转于:https://support.rstudio.com/hc/en-us/articles/115010737148-Using-the-RStudio-Terminal#send 原文是英文版 ...

  9. go源码分析(五) 获取函数名和调用者的函数名

    参考资料 实现代码保存在我的github // input flag 1:FunName 2:CallerFunName func GetFuncName(flag int) string {     ...

  10. sqlmap详解

    sqlmap是一个自动化的sql注入工具,其主要功能是扫描.发现并利用给定URL的SQL注入漏洞,内置了很多绕过插件,支持的数据库有MySQL, Oracle,PostgreSQL, Microsof ...