PCH文件:文件名由“工程名-Prefix.pch”構(gòu)成的預(yù)編譯頭文件。XCode6之前會(huì)在Supporting Files文件夾下自動(dòng)生成,之后則需要手動(dòng)創(chuàng)建。
一、PCH文件的作用
1. 定義全局性宏;
2. 引用全局性頭文件;
3. 根據(jù)運(yùn)行環(huán)境,自動(dòng)打開或者關(guān)閉日志輸出功能。
二、PCH文件的優(yōu)點(diǎn)(產(chǎn)生原因)
1. PCH文件的內(nèi)容能被項(xiàng)目中的其他所有文件共享和訪問,其他地方可直接使用,不用再手動(dòng)重復(fù)定義或引用;
2. 預(yù)編譯后的頭文件會(huì)被緩存起來,再次編譯時(shí),就不需要重新編譯PCH文件中導(dǎo)入的內(nèi)容,從而提高編譯速度。
三、PCH文件的缺點(diǎn)(謹(jǐn)慎使用的原因)
1. 大量的共用性不高的宏定義和頭文件引入,會(huì)導(dǎo)致編譯時(shí)整個(gè)工程范圍地查找和替換這些宏定義字段,或重復(fù)導(dǎo)入這些頭頭文件,造成時(shí)間過長(zhǎng);
2. 把類中使用的框架等放入到PCH中,依賴關(guān)系不明確,不利于代碼的遷移和解耦,降低了代碼的可移植性和復(fù)用性。
四、對(duì)PCH文件使用的一些思考
1. PCH的目的是:提高編譯速度,而不是少敲幾行import;
2. 造成這些問題的原因在于對(duì)PCH文件的使用方式和方法不對(duì)。所以,要正確的、適度的使用PCH文件,揚(yáng)長(zhǎng)避短,不要濫用;
3. 可以考慮按照層級(jí)或者功能模塊等方式,定義多個(gè)頭文件。將該層級(jí)或者模塊共用性較高的宏或文件寫入,供本層使用。如果整個(gè)工程需要使用,再導(dǎo)入PCH文件。這樣既可以避免或減少同一個(gè)且多余的文件被重復(fù)編譯,增加編譯時(shí)間,又可以方便地使用一些全局的東西。
4. 關(guān)于宏定義:宏定義是在預(yù)編譯的時(shí)候處理的。因此,當(dāng)你修改宏定義的時(shí)候 會(huì)導(dǎo)致大量的代碼被重新編譯。另外,宏定義存在許多潛在的bug是因?yàn)樵陬A(yù)編譯的時(shí)候,它并不會(huì)被發(fā)覺到。替代宏定義,可以考慮使用常量const。
5. 關(guān)于引用:iOS7之后,系統(tǒng)的Module都可以被”semantic import”。使用起來很簡(jiǎn)單,把原來的#import換成@import即可。比如:#import <Foundation/Foundation.h>; 換成@import Foundation; 即可。編譯器遇到@import時(shí),會(huì)將預(yù)編譯好的framework載入,同時(shí)也不需要到project settings里添加framework,系統(tǒng)會(huì)幫你做這些事情。這些Module只會(huì)編譯一次。