xcode中关于pch和.h的引用

来源:互联网 发布:淘宝原单店铺推荐2016 编辑:程序博客网 时间:2024/06/06 00:23

header.h

1.引入普遍使用文件

/* 第三方头文件 */#import "MBProgressHUD.h"#import "AFNetworking.h"#import "UIImageView+AFNetworking.h"#import "SBJSON.h"#import "MJRefresh.h"#import "ASProgressPopUpView.h"#import "YYCycleScrollView.h"/* 网络数据 */#import "NTHttpRequest.h"#import "NTNetUtil.h"#import "LCDownloadManager.h"/* 工具 */#import "RMMapper.h"#import "Utils.h"#import "UIViewExt.h"#import "AppData.h"
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17
  • 18
  • 19

2.宏定义

屏幕尺寸 
系统版本 
颜色 
文件路径

//距离#define ScreenWidth [UIScreen mainScreen].bounds.size.width#define ScreenHeight [UIScreen mainScreen].bounds.size.height#define iPhone5sHight 568#define iPhone5sWigtht 320#define iPhone6sHight 667//屏幕尺寸相关#define KSCREENWIDTH  ([UIScreen mainScreen].bounds.size.width)#define KSCREENHEIGHT ([UIScreen mainScreen].bounds.size.height)#define KRATE (KSCREENWIDTH/320.0)//颜色#define SetColor(r,g,b,a) [UIColor colorWithRed:r/255.0 green:g/255.0 blue:b/255.0 alpha:a]#define NavBackColor [Utils colorWithHexString:@"#07c8cf"]#define BackColor SetColor(247, 247, 247, 1)#define LineColor [Utils colorWithHexString:@"#ececec"]//文件路径#define recourcesPath [[NSBundle mainBundle] resourcePath]
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17
  • 18
  • 19
  • 20

pch - Precompile Prefix Header

Xcode 6去掉Precompile Prefix Header的主要原因在于:

(1)去掉自动导入的系统框架类库的头文件,可以提高原文件的复用性,便于迁移。 
(2)一个肥胖无比的Prefix Header会大大增加Build Time。

为了取代在Prefix Header中自动导入的框架,可以在每一个需要导入系统框架的文件中通过@import来手动导入,当然要确保Build Settings中的Enable Modules是打开的。

如果在Prefix Header中导入了,那么我们在工程的每一个文件中可以免费获得使用的权利,而无需手动在每一个.h/.m文件中导入。该文件确有其方便之处。

如果一定要用到Precompile Prefix Header,可以参考Xcode 5的配置来手动设置。

(1)在工程中增加一个pch文件,命名还是按照Xcode 5的模板比较好:工程名-Prefix.pch,例如a-Prefx.pch 
(2)设置Build Settings 
其中Prefix Header指定pch文件的位置。 
这里写图片描述

注意:开关Precompile Prefix Header时,pch的编译和导入机制是有很大不同的。 
如果Precompile Prefix Header为YES,那么pch会被预编译,预编译后的pch文件会被缓存起来,从而提高编译速度。可以从下面的Build Log中看出: 
这里写图片描述

如果Precompile Prefix Header为NO,那么pch不会被预编译,而是在每一个用到它导入的框架类库的.m文件中编译一次。例如a-Prefix.pch导入了,ViewController.m和AppDelegate.m中都使用了objc_property_t这个类型(注意ViewController.h/m和AppDelegate.h/m都没有另外导入),那么在Build的过程中,在编译ViewController.m和AppDelegate.m时,a-Prefix.pch会被编译2次,每个.m文件编译一次。如下图: 
这里写图片描述
由图可知,如果Precompile Prefix Header为NO,那么每个引用了pch内容的.m文件都要编译一次pch,可能Apple会另外做缓存机制,但是这样还是降低了编译的速度。 
既然Apple标准都建议我们不用pch了,那么还是尽量少用吧。当然,如果一定要用,还是尽量减少pch文件中的内容,降低工程对pch文件的依赖性,便于日后的迁移和解耦。