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. 7-19 计算有n个字符串中最长的字符串长度 (40 分)

    编写程序,用于计算有n(1<n<10)个字符串中最长的字符串的长度.前导空格不要计算在内! 输入格式: 在第一行中输入n,接下的每行输入一个字符串 输出格式: 在一行中输出最长的字符串的长 ...

  2. php表单提交后再后退 内容则默认清空的解决方法

    转载原文地址: http://www.jquerycn.cn/a_14422 在session_start()之后,字符输出之前加上header("Cache-control: privat ...

  3. PxCook+photoshop实现傻瓜式切图(推荐小白使用)

    确定需求 刚入门前端的小伙伴经过一个阶段的学习,已经准备小试牛刀了.但看到设计师给出的psd图,又头疼了,天啊撸,怎么办,我不会切图啊.今天我就带领小白学习傻瓜式切图.包学包会.( ̄▽ ̄)" ...

  4. vue中的自定义分页插件组件

    介绍一下,已经有很多的vue分页的组件了,大家都是大同小易,那么我就结合自身的使用,写出了一片文章 首先在新建一个分页模块 在模块中引入相应的代码,(内有详细的注释) template中 <di ...

  5. React Native Debug原理浅析

    第一次在segmentfault写博客,很紧张~~~公司项目上ReactNative,之前也是没有接触过,所以也是一边学习一边做项目了,最近腾出手来更新总结了一下RN的Debug的一个小知识点,不是说 ...

  6. Java的三魂七魄 —— 高级多线程

    目录 Java的三魂七魄 -- 高级多线程 一.多线程的创建 二.线程安全问题 三.线程通信问题 四.更多实例 1.用线程同步的方法解决单例模式的线程安全问题 2.银行存钱问题(线程安全问题) 3.生 ...

  7. VMWare12pro安装Centos 6.9教程

    VMWare下Centos 6.9安装教程,记录如下 1.新建虚拟机 (1)点击文件-->新建虚拟机 (2)选择 自定义(高级)-->下一步 (3)选择Workstation 12.0-- ...

  8. nes 红白机模拟器 第5篇 全屏显示

    先看一下效果图 放大的原理是使用最初级的算法,直接取对应像素法. /*================================================================= ...

  9. docker报错Error response from daemon: driver failed programming external connectivity on endpoint *

    服务端 通常会显示 port xxx allocated的,意思就是 xxx 端口被占用了. 如果报port allocated端口占用,就docker ps 查看正使用的镜像,docker kill ...

  10. c#语言 中FileStream类的基本使用

    FileStream类不是静态类,使用时需要创建对象,FileStream类既可以对文本文件进行读也可以对多媒体文件进行写,以字节数组的形式进行读和写,多用于对大文件进行读写,区别于File类的是它对 ...