iOS - 關於header.h和pch

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"

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]

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文件的依賴性,便於日後的遷移和解耦。

發佈了116 篇原創文章 · 獲贊 4 · 訪問量 4萬+
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章