PCH文件全称Precompile Header File.也就是预编译头文件的意思.
PCH主要有三个作用:
1.放一些公用的宏定义.(一个宏可能在多个控制器都会用到,正常需要在每个控制器都写一次,但是将宏定义写在PCH文件中只需要写一次就可以了)
2.把公共的model类#import导入写到PCH文件中.(一个model可能在多个控制器都会需要导入它的头文件,将#import写在PCH文件中就可以在所有控制器中使用)
3.自定义NSLog.(我们在开发的时候可能会使用很多NSLog来测试程序,但是这些NSLog在程序上架之后就没有用了并且还会拖累程序运行速度,一个个去删除可能花费很多时间,使用自定义NSLog可以一次性的删除这些NSLog)
创建方式:
cmd+n来到新建页面选择other中的PCH File,一般不需要改名字.
接下来在Build Settings中找到下面这两个,将Precompile Prefix Header设置成YES,将Prefix Header设置成$(SRCROOT)/所在文件夹名字/PrefixHeader.pch.
这样PCH文件就生效了
#ifndef PrefixHeader_pch
#define PrefixHeader_pch
// Include any system framework and library headers here that should be included in all compilation units.
// You will also need to set the Prefix Header build setting of one or more of your targets to reference this file.
#endif /* PrefixHeader_pch */
//公用的宏定义
#define ABC 100
//公用的model类头文件导入
#import "Person.h"
//自定义NSLog
#ifdef DEBUG
#define MCLog(...) NSLog(__VA_ARGS__)
#else
#define MCLog(...)
#endif
将公用宏定义和公用的model类头文件写在PCH文件中所有的类都可以使用,并且可以正常输出.
#import "ViewController.h"
@interface ViewController ()
@end
@implementation ViewController
- (void)viewDidLoad {
[super viewDidLoad];
MCLog(@"%d",ABC);
Person *person = [[Person alloc]init];
person.name = @"xiaoli";
MCLog(@"%@",person.name);
}
自定义NSLog代码的意思是当程序为DEBUG阶段的时候使用NSLog,当程序为release也就是发布状态的时候使用自定义Log替换系统的NSLog使其失效.
在Edie Scheme中下图中的Build Configuration修改为Release可以将程序调整成发布状态.
当程序调整成发布状态之后我们自定义的Log就不会再输出了.
需要注意的是很多时候我们需要使用到C语言,在C语言的类中我们的一些#import头文件是会报错的.
所以我们在PCH文件中如果只想要这行代码在OC中生效,就将他写在下面的这两行代码中间.
#if __OBJC__
#endif