#include
C/C++里用來(lái)引入頭文件婆殿,會(huì)造成重復(fù)引用(B和C都引用了A诈乒,D又同時(shí)引用了B和C)∑怕可以用#ifndef一個(gè)標(biāo)志進(jìn)行判斷怕磨,然后在引入后#define這個(gè)標(biāo)志,來(lái)避免重復(fù)引用消约。
#import
OC里用來(lái)引入頭文件肠鲫,可以避免重復(fù)引用。但是當(dāng)一個(gè)頭文件被非常多的引用時(shí)或粮,編譯時(shí)引用所占的代碼量就會(huì)大幅上升导饲,對(duì)于這個(gè)問(wèn)題,C系語(yǔ)言引入了預(yù)編譯頭文件(PreCompiled Header)氯材,將公用的頭文件放入預(yù)編譯頭文件中預(yù)先進(jìn)行編譯渣锦,然后在真正編譯工程時(shí)再將預(yù)先編譯好的產(chǎn)物加入到所有待編譯的Source中去,來(lái)加快編譯速度氢哮。但是把所有頭文件引用都放到pch中袋毙,會(huì)造成引用泛濫的問(wèn)題(有些地方本來(lái)不需要,但是可以引用到冗尤,可能會(huì)出錯(cuò))听盖。
@import
Modules相當(dāng)于將框架進(jìn)行了封裝,然后在實(shí)際編譯之時(shí)加入了一個(gè)用來(lái)存放已編譯添加過(guò)的Modules列表裂七。如果在編譯的文件中引用到某個(gè)Modules的話皆看,將首先在這個(gè)列表內(nèi)查找,找到的話說(shuō)明已經(jīng)被加載過(guò)則直接使用已有的碍讯,如果沒(méi)有找到悬蔽,則把引用的頭文件編譯后加入到這個(gè)表中。這樣被引用到的Modules只會(huì)被編譯一次捉兴,但是在開發(fā)時(shí)又不會(huì)被意外使用到蝎困,從而同時(shí)解決了編譯時(shí)間和引用泛濫兩方面的問(wèn)題。
工程配置:
如果使用的是Xcode5及以上倍啥,對(duì)于原來(lái)的代碼保持#import寫法不變禾乘,在Build Settings中將Enable Modules(C and Objective-C)打開,編譯器會(huì)在編譯的時(shí)候自動(dòng)地把可能的地方換成Modules的寫法去編譯的虽缕。