iOS pch
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,可以使用继承处理公用的宏、框架和三方库。在父类的头文件中定义宏和导入共用框架、三方库,需要用到的去继承。
⑦、宏、框架和三方库共用性高不高有时候很难去界定和把握,就会造成纠结状态,干脆尽量不用了。
五、文章
iOS pch的更多相关文章
- iOS PCH文件
在Xcode6之前,创建一个新的工程,Xcode会再Support Files文件夹下自动创建一个"工程名 - prefix.pch"文件,也是一个头文件,pch文件的内容能被项目 ...
- iOS .pch文件的使用
什么是.pch文件预编译头文件(一般扩展名为.PCH),是把一个工程中较稳定的代码预先编译好放在一个文件(.PCH)里.这些预先编译好的代码可以是任何的C/C++代码--甚至可以是inline函数,只 ...
- iOS pch文件创建使用,和info.plis文件路径改变,路径的设置
一 路径报错: 二 pch创建设置: 一:如果要更改Info.plist与Prefix.pch文件实际路径,也就是实际文件的位置(不是在工程中的组织路径),需要到Build Settings中修改对应 ...
- iOS pch文件的创建
3.iso pch头文件的创建 输入文件名的时候记得打钩 3.1.在Build Settings 里搜索pref就能找到preflx, 点击设置相对路径 $(SRCROOT) +路径:成功了就会显示 ...
- 【原】iOS学习之PCH文件
1. PCH文件概述 PCH文件是一种预编译头文件(一般扩展名为.PCH),是把一个工程中较稳定的代码预先编译好放在一个文件(.PCH)里.这些预先编译好的代码可以是任何的C/C++代码--甚至可以是 ...
- IOS Xcode7 新建PCH文件
第一步:新建文件找到iOS中的Othere点击PCH File 点击Next 第二步:修改文件名为当前工程名(一般与工程名同名),勾选Targets,点击create创建 第三步:如图选中红框中的路径 ...
- iOS 如何给Xcode7项目添加“.pch”文件
1.首先打开你的项目(演示使用一个空的项目),按照以下步骤即可 找到“Supporting Files”文件夹,右键即可看到下图,选择“New File...” 2.选择"iOS" ...
- iOS开发- Xcode 7添加pch文件
1.打开你的Xcode工程. 在Supporting Files目录下,选择 File > New > File > iOS > Other > PCH File 然后点 ...
- ios开发 <AppName>-Prefix.pch文件的用法详解
我们知道,每新建立一个工程,比如说HelloWord,在分类SupportingFiles里都会有一个以工程名开头-Prefix.pch结尾的文件,如HelloWord-Prefix.pch.对于这个 ...
随机推荐
- Ubutun18.04安装Python3.7.6
最近因为环境问题,简单记录下Python3.7的安装过程: 下载地址:http://python.org/ftp/python/3.7.6/Python-3.7.6.tgz 编译安装步骤: sudo ...
- Dart的JIT 与 AOT
JIT:Just In Time AOT:Ahead of Time 含义: 目前,程序主要有两种运行方式:静态编译与动态解释. 静态编译的程序在执行前全部被翻译为机器码,通常将这种类型称为AOT ( ...
- (Win10)Java,Maven,Tomcat8.0,Mysql8.0.15安装与环境配置,以及IDEA2019.3使用JDBC连接MySQL、创建JavaEE项目
之前用windows+linux的双系统,最近不怎么舒服就把双系统给卸了,没想到除了问题,导致有linux残余,于是就一狠心重装了电脑,又把Java及其相关的一些东西重新装了回来,还好当初存了网盘链接 ...
- 7-9 jmu-python-异常-学生成绩处理专业版 (25 分)
小明在帮助老师统计成绩,老师给他的是一组数据.数据的第1行代表学生数n,后面的n行代表每个学生的成绩.成绩是整数类型.小明编写了一个程序,该程序可以批量处理数据,统计所有学生的平均分.当数据没有任何错 ...
- sql02
1.小练习: 一切数据都是有用的,当我们删除时只是象征性设置一个标志位: 2.SQL学习 1)创建数据库 create database DbName; 使用--注释 多行注释/**/ 2)删除数据库 ...
- Canvas 使用及应用
Canvas canvas 是 HTML5 当中我最喜欢的所有新特性中我最喜欢的一个标签了.因为它太强大了,各种有意思的特效都可以实现. 1. canvas 的基本使用方法 - 它是一个行内块元素 - ...
- JZOJ 3928. 【NOIP2014模拟11.6】射击
3928. [NOIP2014模拟11.6]射击 (Standard IO) Time Limits: 1000 ms Memory Limits: 65536 KB Description 有问题, ...
- 数据库--Redis
原因: 源码是官方configure过的,但官方configure时,生成的文件有时间戳信息,所以如果你的虚拟机的时间不对,比如说是2022年,就可能会出错 解决: date -s ‘yyyy-mm- ...
- MySQL敏感数据加密及解密
大数据时代的到来,数据成为企业最重要的资产之一,数据加密的也是保护数据资产的重要手段.本文主要在结合学习通过MySQL函数及Python加密方法来演示数据加密的一些简单方式. 1. 准备工作 为了便于 ...
- .net core WebAPI+EF 动态接收前台json,并动态修改数据库
用API开发的人都知道,常用的后台接收参数就是建个DTO,然后前台把这个DTO传过来.后台再更新,例如如下例子: public async Task<IActionResult> PutM ...