PCH(Precompile Prefix Header File)文件,也就是預編譯頭文件秫筏。pch頭文件的內(nèi)容能被項目中的其他所有源文件共享和訪問诱鞠,可以有效的幫程序員節(jié)約時間,提高開發(fā)效率这敬。
在Xcode6之前航夺,創(chuàng)建一個新工程Xcode會在Supporting files文件夾下面自動創(chuàng)建一個“工程名-Prefix.pch”文件,但是Xcode6之后崔涂,新建項目就不會自動生成pch文件阳掐,需要手動創(chuàng)建并配置。所以本文先講如何創(chuàng)建并配置pch文件。
一锚烦、創(chuàng)建觅闽、配置pch文件
如何創(chuàng)建pch文件
PCH文件的命名一般和它所在的項目同名,我這里為了簡便一點就直接采用系統(tǒng)的命名了
如何配置pch文件
將Precompile Prefix Header后面的值修改為YES涮俄,然后雙擊Prefix Header后面的空白處蛉拙,Xcode會彈出一個輸入框,直接將PCH文件在項目中的相對路徑粘貼上去彻亲,按回車鍵即可配置成功孕锄。這里可能會有人問怎么拿到pch文件的路徑呢
可能有人說"啊,報錯了",不報錯才怪,我只是為了掩飾如何獲取路徑啊啊~~~其實你可以看到現(xiàn)在我們拿到了一個路徑,這是該pch文件所在的絕對路徑,但是前面說了,我們要的是相對路徑.在項目中的相對路徑.很簡單啊.
//絕對路徑
/Users/soufang006/Dev/學習demo/如何創(chuàng)建pch文件/如何創(chuàng)建pch文件/PrefixHeader.pch
//相對路徑
如何創(chuàng)建pch文件/PrefixHeader.pch
拿到相對路徑后到這里,項目的pch文件就已經(jīng)配置完了.
如何使用pch文件
#ifndef PrefixHeader_pch
#define PrefixHeader_pch
#ifdef __OBJC__
#import <UIKit/UIKit.h>
#import <Foundation/Foundation.h>
#endif
#endif
二、關于pch文件的優(yōu)缺點
要說pch文件的優(yōu)點,無外乎得先談談pch文件的作用:1.存放一些全局的宏(整個項目中都用得上的宏)苞尝;2.用來包含一些全部的頭文件(整個項目中都用得上的頭文件)畸肆;3.能自動打開或者關閉日志輸出功能。
那關于大部分人說的xcode6之后之所以不自動生成pch文件,是出于提高編譯效率方面的考慮宙址,畢竟預編譯也會提高Build的時間轴脐。在網(wǎng)上看到的這篇博文說的很有道理,我就直接粘過來了.
問題1:那么,為什么會有很多人說pch降低編譯速度抡砂?我想是因為使用方式不對大咱,反而導致編譯速度降低吧。罪魁禍首就是大量的共用性不高的宏定義和頭文件的引入注益。編譯的時候整個工程范圍地查找和替換這些宏定義字段碴巾,重復導入這些頭文件,不慢就奇怪了丑搔。正確的使用方式:不要把所有的宏定義都放到pch文件中厦瓢,尤其是共用性較小的宏定義;將公用性高的頭文件放到pch中,比如fundation框架等啤月;(整潔性原則)將零散的宏定義專門創(chuàng)建一個頭文件來放置煮仇,再導入到pch中,方便查看和修改顽冶;問題2:如果不使用pch欺抗,又該如何處理公用的宏售碳、框架和三方庫强重?答案是使用繼承,在父類的頭文件中定義宏和導入共用框架贸人、三方庫间景。需要用到的才去繼承∫罩牵可以根據(jù)項目的框架倘要,各個層之間分開去定義父類。如MVC中的View層,父類中可以添加控件的Category封拧,屏幕寬高宏等志鹃。問題3:即使知道pch的正確使用方式,為何大部分開發(fā)者也盡量不使用pch文件泽西?有些時候宏曹铃、框架和三方庫共用性高不高很難去界定和把握,就會造成糾結狀態(tài)捧杉,干脆就不用了陕见。另一個最大的壞處,我想是pch降低了代碼的可移植性味抖。把類中使用的框架等放在pch中评甜,要么你要重新去導入,要么把pch一同拖走仔涩,還要刪掉沒用的代碼忍坷,代價也是蠻大的。
甩個鏈接:http://blog.csdn.net/ws1352864983/article/details/51909241