https://blog.csdn.net/zanshiyonghuming/article/details/50833260
1.import會(huì)包含這個(gè)類的所有信息,包括實(shí)體變量和方法,而@class只告訴編 譯器,聲明的類的名稱,至于這些類是如何定義的,暫時(shí)不用考慮,后面會(huì)再告訴你,所以在頭文件中如果用@class聲明某個(gè)類后,在.m的實(shí)現(xiàn)中如果用到聲明類的具體方法或變量時(shí)還得再#import類 ?
2.在.h頭文件中進(jìn)行聲明時(shí)用#import的話,如果100個(gè)頭文件都#import同一個(gè)頭件,或者這些文件是依次引用的,如A->B,B->C,C->D,當(dāng)最開始的那個(gè)頭文件有變化后進(jìn)行編譯時(shí),后面所有引用它的類都需要重新編譯,如果引用最開始的頭文件的類很多的話,那么這將耗費(fèi)大量的時(shí)間,而用@class則不會(huì),可能有人會(huì)想即然.h只是用@class只是簡(jiǎn)單的一個(gè)聲明告編譯器有這個(gè)類不讓其報(bào)錯(cuò),那么.m中要用到引入的類的方法和屬性時(shí),不還是要#import頭文件一次,是的這個(gè)是對(duì)的,但編譯器編譯的時(shí)候只編譯頭文件的,所以你的.m中用#import與編譯時(shí)間沒(méi)太大關(guān)系
3.接下來(lái)說(shuō)說(shuō)什么時(shí)候該用@class,什么時(shí)候該用#import進(jìn)行聲明,
? (1)一般如果有繼承關(guān)系的用#import,如B是A的子類那么在B中聲明A?xí)r用#import
? (2) 另外就是如果有循環(huán)依賴關(guān)系,如:A->B,B->A這樣相互依賴時(shí),如果在兩個(gè)文件的頭文件中用#import分別聲明對(duì)方,那么就會(huì)出現(xiàn)頭文件循環(huán)利用的錯(cuò)誤,這時(shí)在頭文件中用@class聲明就不會(huì)出錯(cuò)
? ? 最重要的來(lái)了 ?如果用了@class 你還是想調(diào)用@class類里的方法或者成員變量 ? 你需要要在 ?在調(diào)用類中的.m文件中 ?在import一下被調(diào)用類
比如A類想要應(yīng)用B類里的方法,你需要在A類的.h中@classB ?然后子啊A類的.m中 ?在importB ?就可以了
原文 :
https://blog.csdn.net/zanshiyonghuming/article/details/50833260