一、 PCH文件的作用

Xcode中,PCH文件在程序编译的时候会自动包含进去。也就是说PCH中的内容是全局的,可以使用在程序的任何地方,通过这个特性,我们可以概括到PCH的作用有以下几个方面:

(1)将经常使用的宏定义在该文件,可以避免多次定义的麻烦

(2)包含多次使用的.h文件

(3)其他需要全局定义的变量等

Xcode6.0之前会自动创建该文件,开发者直接使用即可。Xcode6.0之后需要开发者自己创建配置,至于为什么大概是因为:

(1)不利于代码的移植。  主要体现在部分头文件被写入PCH,移植的时候如果没有将PCH的头文件包含,新项目则会缺失很多头文件。

(2)造成隐式依赖。本来我们可以通过扫描xxx.h和xxx.m文件,找到xxx所依赖的模块。但是滥用pch会让这些依赖关系被掩盖,因为你的文件可能隐式地依赖了pch中定义的某些头文件。我在另外一篇文章架构设计中的循环引用中提到文件之间不应该循环引用,否则系统将越来越复杂和不可维护。

(3)如果PCH中的头文件很多且很大,会造成预编译的过程便的缓慢,体现在用户的体验上则表现为首次进入APP的时间变长,体验效果欠佳。

(4)XCode 中添加了Modules的引入可以更好地替代预编译头文件。目前Modules只能针对Xcode7及以上的SDK。

但是PCH文件也并没有完全退出舞台,只要合理使用,PCH还是能给我们带来不少方便的。Xcode不自动配置PCH文件,我们可以手动进行配制。

二、创建、配置PCH文件

Xcode中 command+N, 选中other ,可以看到其中就有PCH File,创建。取名字最好跟APP关联便于识别,假如这里命名为Test1PCH。

创建好了之后进行配制:

(1)找到 Project > Build Settings > 搜索 “Prefix Header“;

(2)“Apple LLVM 7.0 -Language″ 栏目中你将会看到 Prefix Header 关键字;

(3)输入: $(SRCROOT)/Test/Test1Pch.pch;注意这里最好使用相对路径,后两项分别代表 Target名称 和 PCH文件。

(4)将Precompile Prefix Header为YES,预编译后的pch文件会被缓存起来,可以提高编译速度。效果如下

最后,Clean 并且 build 你的项目.  创建的PCH文件就可以使用了。

iOS开发 - OC - PCH文件使用的更多相关文章

  1. iOS开发中.pch 文件的使用及其相关工程设置

    .pch文件 也是一个头文件,pch头文件的内容能被项目中的其他所有源文件共享和访问.是一个预编译文件. 首先说一下pch的作用: 1.存放一些全局的宏(整个项目中都用得上的宏) 2.用来包含一些全部 ...

  2. iOS开发添加pch文件

    首先说一下pch的作用: 1.存放一些全局的宏(整个项目中都用得上的宏) 2.用来包含一些全部的头文件(整个项目中都用得上的头文件) 3.能自动打开或者关闭日志输出功能 如何在Xcode中添加pch文 ...

  3. iOS开发OC基础:Xcode中常见英文总结,OC常见英文错误

    在开发的过程中难免会遇到很多的错误,可是当看到系统给出的英文时,又不知道是什么意思.所以这篇文章总结了Xcode中常见的一些英文单词及词组,可以帮助初学的人快速了解给出的提示.多练习,就肯定能基本掌握 ...

  4. iOS开发网络篇—文件的上传

    iOS开发网络篇—文件的上传 说明:文件上传使用的时POST请求,通常把要上传的数据保存在请求体中.本文介绍如何不借助第三方框架实现iOS开发中得文件上传. 由于过程较为复杂,因此本文只贴出部分关键代 ...

  5. iOS 开发http post 文件的上传

    iOS开发网络篇—文件的上传 说明:文件上传使用的时POST请求,通常把要上传的数据保存在请求体中.本文介绍如何不借助第三方框架实现iOS开发中得文件上传. 由于过程较为复杂,因此本文只贴出部分关键代 ...

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

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

  7. iOS开发——OC篇&OC高级语法

    iOS开发高级语法之分类,拓展,协议,代码块详解 一:分类 什么是分类Category? 分类就是类的补充和扩展部分 补充和扩展的每个部分就是分类 分类本质上是类的一部分 分类的定义 分类也是以代码的 ...

  8. iOS开发-- 创建podspec文件,为自己的项目添加pod支持

    开篇扯淡 作为一个iOS开发者,一定用过CocoaPods吧,没用过?点这儿去面壁吧 Cocoapods作为iOS开发的包管理器,给我们的开发带来了极大的便利,而且越来越多的第三方类库支持Pod,可以 ...

  9. iOS开发——Swift篇&文件,文件夹操作

    文件,文件夹操作   ios开发经常会遇到读文件,写文件等,对文件和文件夹的操作,这时就可以使用NSFileManager,NSFileHandle等类来实现. 下面总结了各种常用的操作:   1,遍 ...

  10. iOS开发——OC篇&纯代码退出键盘

    关于iOS开发中键盘的退出,其实方法有很多中,而且笔者也也学会了不少,包括各种非纯代码界面的退出. 但是最近开始着手项目的时候却闷了,因为太多了,笔者确实知道有很多中方法能实现,而且令我影响最深的就是 ...

随机推荐

  1. 线上mongodb数据库mLab使用总结

    最近在CNode社区看到有人分享了免费的线上mongodb数据库(容量500M),今天去注册了一下,成功的将线下数据库替换掉了,现在就说一下它的使用和配置需要注意的地方: mLab是一款免费的在线mo ...

  2. Nothing about semantics

    Motivation fork a project in github, seriously. Candidates PasaLab / cichlid 80% Distributed RDFS &a ...

  3. Java设计模式(十三) 别人再问你设计模式,叫他看这篇文章

    原创文章,转载请务注明出处 OOP三大基本特性 封装 封装,也就是把客观事物封装成抽象的类,并且类可以把自己的属性和方法只让可信的类操作,对不可信的进行信息隐藏. 继承 继承是指这样一种能力,它可以使 ...

  4. 105 董婷婷 第一次Sprint总结

    总结: 经过一个多星期,第一次Sprint在今天结束了,在这次Sprint中我们的工作主要做的是对项目的构建及各种界面的设计和完善,一些比较具体的功能还没有实现.在这次Sprint中因为有上学期合作的 ...

  5. (转)实例简述Spring AOP之间对AspectJ语法的支持(转)

    Spring的AOP可以通过对@AspectJ注解的支持和在XML中配置来实现,本文通过实例简述如何在Spring中使用AspectJ.一:使用AspectJ注解:1,启用对AspectJ的支持:通过 ...

  6. iOS测试常见崩溃

    什么是崩溃日志,从哪里能得它? iOS设备上的应用闪退时,操作系统会生成一个崩溃报告,也叫崩溃日志,保存在设备上.崩溃日志上有很多有用的信息,包括应用是什么情况下闪退的.通常,上面有每个正在执行线程的 ...

  7. HTML5 地理位置定位(HTML5 Geolocation)原理及应用

    地理位置(Geolocation)是 HTML5 的重要特性之一,提供了确定用户位置的功能,借助这个特性能够开发基于位置信息的应用.今天这篇文章向大家介绍一下 HTML5 地理位置定位的基本原理及各个 ...

  8. UART

    一.协议部分: 协议部分转自:http://www.s8052.com/index.htm 串行通信的传送方向通常有三种: 1.为单工,只允许数据向一个方向传送: 2.半双工,允许数据向两个方向中的任 ...

  9. ubuntu 安装git服务器

    ubuntu14.04安装git,搭建环境 1.sudo apt-get install git 2.生成key ssh-keygen -t rsa 3.保存其他用户,创建的ssh用户密码 cd .s ...

  10. jsp中查询条件的回显

    后台框架为ssh,前台纯手写无框架是最老的写法,因为是接手别人的项目无法改变框架原型,只能基于修改. 进入正题: 我这里查询条件有两种input的text(文本框)和select(下拉框). 1.te ...