PCH(Precompile Prefix Header File)文件,也就是預(yù)編譯頭文件。pch頭文件的內(nèi)容能被項(xiàng)目中的其他所有源文件共享和訪問,可以有效的幫程序員節(jié)約時(shí)間,提高開發(fā)效率。
在Xcode6之前,創(chuàng)建一個(gè)新工程Xcode會(huì)在Supporting files文件夾下面自動(dòng)創(chuàng)建一個(gè)“工程名-Prefix.pch”文件,但是Xcode6之后,新建項(xiàng)目就不會(huì)自動(dòng)生成pch文件,需要手動(dòng)創(chuàng)建并配置。所以本文先講如何創(chuàng)建并配置pch文件。
一、創(chuàng)建、配置pch文件
如何創(chuàng)建pch文件

PCH文件的命名一般和它所在的項(xiàng)目同名,我這里為了簡(jiǎn)便一點(diǎn)就直接采用系統(tǒng)的命名了


如何配置pch文件

將Precompile Prefix Header后面的值修改為YES,然后雙擊Prefix Header后面的空白處,Xcode會(huì)彈出一個(gè)輸入框,直接將PCH文件在項(xiàng)目中的相對(duì)路徑粘貼上去,按回車鍵即可配置成功。這里可能會(huì)有人問怎么拿到pch文件的路徑呢

可能有人說"啊,報(bào)錯(cuò)了",不報(bào)錯(cuò)才怪,我只是為了掩飾如何獲取路徑啊啊~~~其實(shí)你可以看到現(xiàn)在我們拿到了一個(gè)路徑,這是該pch文件所在的絕對(duì)路徑,但是前面說了,我們要的是相對(duì)路徑.在項(xiàng)目中的相對(duì)路徑.很簡(jiǎn)單啊.
//絕對(duì)路徑
/Users/soufang006/Dev/學(xué)習(xí)demo/如何創(chuàng)建pch文件/如何創(chuàng)建pch文件/PrefixHeader.pch
//相對(duì)路徑
如何創(chuàng)建pch文件/PrefixHeader.pch
拿到相對(duì)路徑后
到這里,項(xiàng)目的pch文件就已經(jīng)配置完了.
如何使用pch文件
#ifndef PrefixHeader_pch
#define PrefixHeader_pch
#ifdef __OBJC__
#import <UIKit/UIKit.h>
#import <Foundation/Foundation.h>
#endif
#endif
二、關(guān)于pch文件的優(yōu)缺點(diǎn)
要說pch文件的優(yōu)點(diǎn),無(wú)外乎得先談?wù)刾ch文件的作用:1.存放一些全局的宏(整個(gè)項(xiàng)目中都用得上的宏);2.用來(lái)包含一些全部的頭文件(整個(gè)項(xiàng)目中都用得上的頭文件);3.能自動(dòng)打開或者關(guān)閉日志輸出功能。
那關(guān)于大部分人說的xcode6之后之所以不自動(dòng)生成pch文件,是出于提高編譯效率方面的考慮,畢竟預(yù)編譯也會(huì)提高Build的時(shí)間。在網(wǎng)上看到的這篇博文說的很有道理,我就直接粘過來(lái)了.
問題1:那么,為什么會(huì)有很多人說pch降低編譯速度?我想是因?yàn)槭褂梅绞讲粚?duì),反而導(dǎo)致編譯速度降低吧。罪魁禍?zhǔn)拙褪谴罅康墓灿眯圆桓叩暮甓x和頭文件的引入。編譯的時(shí)候整個(gè)工程范圍地查找和替換這些宏定義字段,重復(fù)導(dǎo)入這些頭文件,不慢就奇怪了。正確的使用方式:不要把所有的宏定義都放到pch文件中,尤其是共用性較小的宏定義;將公用性高的頭文件放到pch中,比如fundation框架等;(整潔性原則)將零散的宏定義專門創(chuàng)建一個(gè)頭文件來(lái)放置,再導(dǎo)入到pch中,方便查看和修改;問題2:如果不使用pch,又該如何處理公用的宏、框架和三方庫(kù)?答案是使用繼承,在父類的頭文件中定義宏和導(dǎo)入共用框架、三方庫(kù)。需要用到的才去繼承??梢愿鶕?jù)項(xiàng)目的框架,各個(gè)層之間分開去定義父類。如MVC中的View層,父類中可以添加控件的Category,屏幕寬高宏等。問題3:即使知道pch的正確使用方式,為何大部分開發(fā)者也盡量不使用pch文件?有些時(shí)候宏、框架和三方庫(kù)共用性高不高很難去界定和把握,就會(huì)造成糾結(jié)狀態(tài),干脆就不用了。另一個(gè)最大的壞處,我想是pch降低了代碼的可移植性。把類中使用的框架等放在pch中,要么你要重新去導(dǎo)入,要么把pch一同拖走,還要?jiǎng)h掉沒用的代碼,代價(jià)也是蠻大的。
甩個(gè)鏈接:http://blog.csdn.net/ws1352864983/article/details/51909241