PCH(Precompile Prefix Header File)文件,也就是預(yù)編譯頭文件抖拦。pch頭文件的內(nèi)容能被項(xiàng)目中的其他所有源文件共享和訪問(wèn),可以有效的幫程序員節(jié)約時(shí)間,提高開(kāi)發(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)的命名了
到這里就已經(jīng)創(chuàng)建好了pch文件,下一步來(lái)看如何配置pch文件
- 如何配置pch文件
將Precompile Prefix Header后面的值修改為YES拷窜,然后雙擊Prefix Header后面的空白處开皿,Xcode會(huì)彈出一個(gè)輸入框,直接將PCH文件在項(xiàng)目中的相對(duì)路徑粘貼上去篮昧,按回車(chē)鍵即可配置成功赋荆。這里可能會(huì)有人問(wèn)怎么拿到pch文件的路徑呢
可能有人說(shuō)"啊,報(bào)錯(cuò)了",不報(bào)錯(cuò)才怪,我只是為了掩飾如何獲取路徑啊啊~~~其實(shí)你可以看到現(xiàn)在我們拿到了一個(gè)路徑,這是該pch文件所在的絕對(duì)路徑,但是前面說(shuō)了,我們要的是相對(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)配置完了.下面來(lái)看如何使用pch文件
- 如何使用pch文件
我們知道,一般項(xiàng)目在debug狀態(tài)下我們需要打印log來(lái)進(jìn)行調(diào)試與bug定位,但是在release狀態(tài)下,我們一般是不希望輸出log的.那關(guān)于這個(gè)需求我們就可以直接寫(xiě)在pch文件里了
以上就是關(guān)于如何配置 pch 文件.
說(shuō)完如何配置pch文件,就要說(shuō)一說(shuō)他的優(yōu)缺點(diǎn)懊昨。
關(guān)于pch文件的優(yōu)缺點(diǎn)
要說(shuō)pch文件的優(yōu)點(diǎn),無(wú)外乎得先談?wù)刾ch文件的作用:1.存放一些全局的宏(整個(gè)項(xiàng)目中都用得上的宏)窄潭;2.用來(lái)包含一些全部的頭文件(整個(gè)項(xiàng)目中都用得上的頭文件);3.能自動(dòng)打開(kāi)或者關(guān)閉日志輸出功能疚颊。
那關(guān)于大部分人說(shuō)的xcode6之后之所以不自動(dòng)生成pch文件,是出于提高編譯效率方面的考慮狈孔,畢竟預(yù)編譯也會(huì)提高Build的時(shí)間。
在網(wǎng)上看到的這篇博文說(shuō)的很有道理,我就直接粘過(guò)來(lái)了.
問(wèn)題1:那么材义,為什么會(huì)有很多人說(shuō)pch降低編譯速度均抽?
我想是因?yàn)槭褂梅绞讲粚?duì),反而導(dǎo)致編譯速度降低吧其掂。罪魁禍?zhǔn)拙褪谴罅康墓灿眯圆桓叩暮甓x和頭文件的引入油挥。編譯的時(shí)候整個(gè)工程范圍地查找和替換這些宏定義字段,重復(fù)導(dǎo)入這些頭文件款熬,不慢就奇怪了深寥。
正確的使用方式:
不要把所有的宏定義都放到pch文件中,尤其是共用性較小的宏定義;
將公用性高的頭文件放到pch中贤牛,比如fundation框架等惋鹅;
(整潔性原則)將零散的宏定義專(zhuān)門(mén)創(chuàng)建一個(gè)頭文件來(lái)放置,再導(dǎo)入到pch中殉簸,方便查看和修改闰集;
問(wèn)題2:如果不使用pch沽讹,又該如何處理公用的宏、框架和三方庫(kù)武鲁?
答案是使用繼承爽雄,在父類(lèi)的頭文件中定義宏和導(dǎo)入共用框架、三方庫(kù)沐鼠。需要用到的才去繼承挚瘟。可以根據(jù)項(xiàng)目的框架饲梭,各個(gè)層之間分開(kāi)去定義父類(lèi)乘盖。如MVC中的View層,父類(lèi)中可以添加控件的Category排拷,屏幕寬高宏等侧漓。
問(wèn)題3:即使知道pch的正確使用方式,為何大部分開(kāi)發(fā)者也盡量不使用pch文件监氢?
有些時(shí)候宏布蔗、框架和三方庫(kù)共用性高不高很難去界定和把握,就會(huì)造成糾結(jié)狀態(tài)浪腐,干脆就不用了纵揍。另一個(gè)最大的壞處,我想是pch降低了代碼的可移植性议街。把類(lèi)中使用的框架等放在pch中泽谨,要么你要重新去導(dǎo)入,要么把pch一同拖走特漩,還要?jiǎng)h掉沒(méi)用的代碼吧雹,代價(jià)也是蠻大的。
甩個(gè)鏈接:http://blog.csdn.net/ws1352864983/article/details/51909241