iOS开发 - OC - PCH文件使用
一、 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文件使用的更多相关文章
- iOS开发中.pch 文件的使用及其相关工程设置
.pch文件 也是一个头文件,pch头文件的内容能被项目中的其他所有源文件共享和访问.是一个预编译文件. 首先说一下pch的作用: 1.存放一些全局的宏(整个项目中都用得上的宏) 2.用来包含一些全部 ...
- iOS开发添加pch文件
首先说一下pch的作用: 1.存放一些全局的宏(整个项目中都用得上的宏) 2.用来包含一些全部的头文件(整个项目中都用得上的头文件) 3.能自动打开或者关闭日志输出功能 如何在Xcode中添加pch文 ...
- iOS开发OC基础:Xcode中常见英文总结,OC常见英文错误
在开发的过程中难免会遇到很多的错误,可是当看到系统给出的英文时,又不知道是什么意思.所以这篇文章总结了Xcode中常见的一些英文单词及词组,可以帮助初学的人快速了解给出的提示.多练习,就肯定能基本掌握 ...
- iOS开发网络篇—文件的上传
iOS开发网络篇—文件的上传 说明:文件上传使用的时POST请求,通常把要上传的数据保存在请求体中.本文介绍如何不借助第三方框架实现iOS开发中得文件上传. 由于过程较为复杂,因此本文只贴出部分关键代 ...
- iOS 开发http post 文件的上传
iOS开发网络篇—文件的上传 说明:文件上传使用的时POST请求,通常把要上传的数据保存在请求体中.本文介绍如何不借助第三方框架实现iOS开发中得文件上传. 由于过程较为复杂,因此本文只贴出部分关键代 ...
- 【原】iOS学习之PCH文件
1. PCH文件概述 PCH文件是一种预编译头文件(一般扩展名为.PCH),是把一个工程中较稳定的代码预先编译好放在一个文件(.PCH)里.这些预先编译好的代码可以是任何的C/C++代码--甚至可以是 ...
- iOS开发——OC篇&OC高级语法
iOS开发高级语法之分类,拓展,协议,代码块详解 一:分类 什么是分类Category? 分类就是类的补充和扩展部分 补充和扩展的每个部分就是分类 分类本质上是类的一部分 分类的定义 分类也是以代码的 ...
- iOS开发-- 创建podspec文件,为自己的项目添加pod支持
开篇扯淡 作为一个iOS开发者,一定用过CocoaPods吧,没用过?点这儿去面壁吧 Cocoapods作为iOS开发的包管理器,给我们的开发带来了极大的便利,而且越来越多的第三方类库支持Pod,可以 ...
- iOS开发——Swift篇&文件,文件夹操作
文件,文件夹操作 ios开发经常会遇到读文件,写文件等,对文件和文件夹的操作,这时就可以使用NSFileManager,NSFileHandle等类来实现. 下面总结了各种常用的操作: 1,遍 ...
- iOS开发——OC篇&纯代码退出键盘
关于iOS开发中键盘的退出,其实方法有很多中,而且笔者也也学会了不少,包括各种非纯代码界面的退出. 但是最近开始着手项目的时候却闷了,因为太多了,笔者确实知道有很多中方法能实现,而且令我影响最深的就是 ...
随机推荐
- eclipse常用插件
1. eclipse安装主题插件:http://www.eclipsecolorthemes.org/ 2. eclipse terminal插件:在eclipse中集成终端,使用非常方便,不用单独打 ...
- intent打开第三方应用
有时候我们会有在自己的应用中进入另一个第三方应用的需求,首先要知道第三方应用的包名和主activity,很简单遍历一下所有的应用就能拿到了. private void go2App(String pa ...
- while做法1.兔子生兔子 2.求100以内质数的和3.洗发水15元 牙膏5元 香皂2元 150元的算法
1.兔子生兔子 2.求100以内质数的和 3.150块钱花完问题
- 安装系统时出现“windows无法安装到这个磁盘。选中的的磁盘采用GPT分区形式”
安装系统到提示你不能安装在那个磁盘的一步,然后按住shift+F10呼出diskpart命令符,然后依次输入 diskpart list disk select disk 0 clean conver ...
- XJOI‘s story (不定期连载)
王城双基的力量.... 我也不知道写写这种东西会不会被查大表..尴尬 . 我为什么要写这东西: 为了蛤鸡 为了红太阳 xj 人物列传 2017 1,6 Friday 得到大新闻 机房后面的监 ...
- 利用html5的localStorage做一个备忘录
实现一个便签功能,可以记录内容和写的时间,当网页从新载入,可以读取以前的记录. html文档 <!DOCTYPE html> <html> <head lang=&quo ...
- C#压缩图片——高质量压缩方式
传入Bitmap对象,以及新图片的长宽(Bitmap.Size),这样生成的就是跟原图尺寸一致的低质量图片 public Bitmap GetImageThumb(Bitmap mg, Size ne ...
- 跟我学Windows Azure 四 Cloud Service中的WebRole与WorkRole,及他们之间的通信
Cloud Service 中WebRole就相当与我们的WebSite,而WorkRole相当与我们在服务器上写了个Windows Service,站在高可用的角度上来讲,Cloud Service ...
- 富文本编辑器防止xss注入javascript版
富文本编辑器:ueditor 其实富文本编辑器已经有防止xss注入功能,但是你服务端程序在接收的时候在做一次转义,否则有可能然后前端验证直接提交数据导致被xss攻击. 为了节省后端程序开销则在前端 显 ...
- 处理大并发之五 使用libevent利器bufferevent
转自:http://blog.csdn.net/feitianxuxue/article/details/9386843 处理大并发之五 使用libevent利器bufferevent 首先来翻译一段 ...