#include 和 #import
不同點(diǎn):在引用關(guān)系很復(fù)雜的時(shí)候块蚌,#include
會(huì)產(chǎn)生重復(fù)引用帶來的編譯問題。比如:B 和 C 都引用了A域携,D 又同時(shí)引用了B和C帆啃,這樣A中定義的東西就在D中被定義了兩次,重復(fù)了虐秋。 而#impor
t會(huì)保證每個(gè)頭文件只會(huì)被引用一次晰韵。
共同點(diǎn):#include
和#import
都是文本語(yǔ)義:預(yù)處理器在處理的時(shí)候會(huì)把這一行替換成相應(yīng)頭文件的文本,這種簡(jiǎn)單粗暴的替換會(huì)有很多問題:
- 大量的預(yù)處理消耗熟妓。假如有N個(gè)頭文件雪猪,每個(gè)頭文件又
#include
了M個(gè)頭文件,那么這個(gè)預(yù)處理的消耗就是N*M起愈。 - 文件導(dǎo)入后只恨,宏定義容易出現(xiàn)問題译仗。因?yàn)槭俏谋緦?dǎo)入,并且按照
include
依次替換官觅,當(dāng)一個(gè)頭文件定義了#define std hello_word
纵菌,而另一個(gè)頭文件剛好是C++標(biāo)準(zhǔn)庫(kù),那么include
順序不同休涤,可能會(huì)導(dǎo)致所有的std 都會(huì)被替換咱圆。
@import
@import
不再使用文本模型,而是采用更高效的語(yǔ)義模型功氨。module會(huì)被作為一個(gè)獨(dú)立的模塊編譯序苏,并且產(chǎn)生獨(dú)立的緩存。從而大幅度提高預(yù)處理效率捷凄,這樣時(shí)間消耗從 M*N 變成了M+N
參考文檔
https://juejin.im/post/5c22eaf1f265da611b5863b2#heading-11
https://onevcat.com/2013/06/new-in-xcode5-and-objc/