以前在写代码的时候在屏幕适配和系统适配的时候都是建立一个头文件然后当某个类需要使用的时候#import 进去,
今天看公司的项目,发现他们使用的是一个.pch文件,既然两种方式都可以实现,那公司项目中为什么要使用.pch文件呢?原因是当我们的工程项目特别大的时候,我们需要把大量的头文件和宏定义导入到每一个类中,这样就会导致编译时间过长,系统耗费的资源过大。
1:Xcode6.0以前的版本会自动为我们创建.pch 文件,新版本以后需要我们手动创建;
2: .pch文件也是一个头文件,可以做一些预编译的操作,比如引入全局头文件和定义一些常量,可以被项目中的其他所有源文件共享和访问;
3:项目中.pch 文件的创建:
在工程的Targets里面进行工程设置:Prefix Header, 将 Precompile Prefix Header设置为YES:
在Precompile Prefix Header添加工程文件目录
4:.pch 文件的作用:
1:存放一些全局的宏(整个项目中都可以使用到的)
#ifndef PrefixHeader_pch
#define PrefixHeader_pch
#endif /* PrefixHeader_pch */
#define SCREEN_FRAME ([UIScrren mainScreen].applicationFrame)
#define SCREEN_WIDTH ([UIScreen mainScreen].bounds.size.width)
#define SCREEN_HEIGHT ([UIScreen mainScreen].bounds.size.height)
2:用来包含一些全部的头文件(整个项目中都可以使用到的头文件)
#import <Availability.h>
#ifndef __IPHONE_3_0
#warning "This project uses features only available in iPhone SDK 3.0 and later."
#endif
#ifdef __OBJC__
#import <UIKit/UIKit.h>
#import <Foundation/Foundation.h>
#import "Header.h"
#endif
这里引入了一些头文件,其实是Xcode的一种编译机制,我们在编译一个项目的时候,会有很多常用的源文件,并且这些代码文件几乎不被修改,所以Xcode对这些文件只在早期进行一次编译,以便我们以后的多次构建中反复使用,例如这里的UIKit 和 Foundation,这样的机制可以加快我们每次构建项目的速度。
3:能自动打开或者关闭日志输出功能
平时在开发应用的时候经常会遇到NSLog来调试程序,随着项目越来越大,这些用于调试的日志输出就会变得很难管理。在开发正式版本的时候要屏蔽掉所有后台输出,因为这些输出也耗费资源,所以我们得一行一行找到NSLog,然后将其注释掉。在项目比较小的时候还行,但是如果项目规模特别大,就会变得很难控制,解决的办法就是定义这样一点预处理命令:
#ifndef CLog_h
#define CLog_h
//程序段
#ifdef DEBUG
#define CLog(format, ...) NSLog(format, ## __VA_ARGS__)
#else
#define CLog(format, ...)
#endif
#endif
使用的方法就是在.pch文件中导入CLog.h就可以了,这样就实现了任何一个源文件中使用CLog宏输出体质的时候,预处理命令会自动判断当前的编译配置,如果是DEBUG 就会输出日志,否则不会输出
#import <Availability.h>
#ifndef __IPHONE_3_0
#warning "This project uses features only available in iPhone SDK 3.0 and later."
#endif
#ifdef __OBJC__
#import <UIKit/UIKit.h>
#import <Foundation/Foundation.h>
#import "CLog.h"
#endif