#include C/C++中導(dǎo)入頭文件的預(yù)編譯指令
1. #include"A.h" ?在用戶(hù)自己的目錄下尋找文件
2. #include<B.h> ?在系統(tǒng)目錄下尋找文件
#include會(huì)包含這個(gè)類(lèi)的全部?jī)?nèi)容, 使用時(shí)要避免遞歸包含,例如:A.h包含B.h, 那么B.h就不能包含A.h, 否則編譯會(huì)報(bào)錯(cuò); 還需要注意重復(fù)包含的問(wèn)題, 例如:A.h已包含B.h, 那么在C.h中就不要再同時(shí)包含A.h和B.h, 雖然是允許的,但會(huì)降低編譯效率, OC的#import解決了重復(fù)包含的問(wèn)題(這也是兩者的區(qū)別);
#import OC中導(dǎo)入頭文件的預(yù)編譯指令
1. #import"A.h" ?在用戶(hù)自己的目錄下尋找文件
2. #import<B.h>??在系統(tǒng)目錄下尋找文件
#import 同樣會(huì)包含這個(gè)類(lèi)的全部?jī)?nèi)容, 不會(huì)有重復(fù)包含的問(wèn)題, 但同樣會(huì)有遞歸包含(交叉導(dǎo)入)的問(wèn)題, 即兩者產(chǎn)生循環(huán)依賴(lài)關(guān)系, 例如: A.h->B.h, B.h->A.h, 這時(shí)就形成了交叉導(dǎo)入的問(wèn)題; @class 的出現(xiàn)就能很好的解決這個(gè)問(wèn)題;
@class OC中聲明類(lèi)名
@class 告訴編譯器, 緊跟我之后的是一個(gè)存在的類(lèi), 你不要警告,不要報(bào)錯(cuò), 至于這個(gè)類(lèi)是干什么的我隨后再告訴你; 所以, @class 并不能包含類(lèi)中的信息, 只是類(lèi)的一個(gè)代言人, 要想使用類(lèi)的屬性, 成員方法, 實(shí)體變量等, 還要在.m 中#import這個(gè)類(lèi)
綜上, @class不會(huì)包含類(lèi)中內(nèi)容, 所以@class的編譯效率也要高于#import, 但同時(shí)也不可知類(lèi)的信息, 要想使用類(lèi)的屬性, 成員方法, 實(shí)體變量等, 還要在.m 中#import這個(gè)類(lèi), 所以在實(shí)際開(kāi)發(fā)中, 我們能夠使用.h中 @class 類(lèi), .m中 #import 類(lèi) 的方法就不要在.h 中 #import 類(lèi), 這樣既可避免了交叉導(dǎo)入, 又提高了編譯效率