1. 程式人生 > >ios oc 類之間相互依賴 關於import和@class的區別

ios oc 類之間相互依賴 關於import和@class的區別

   

1.import會包含這個類的所有資訊,包括實體變數和方法,而@class只告訴編 譯器,宣告的類的名稱,至於這些類是如何定義的,暫時不用考慮,後面會再告訴你,所以在標頭檔案中如果用@class宣告某個類後,在.m的實現中如果用到宣告類的具體方法或變數時還得再#import類  

2.在.h標頭檔案中進行宣告時用#import的話,如果100個頭檔案都#import同一個頭件,或者這些檔案是依次引用的,如A->B,B->C,C->D,當最開始的那個標頭檔案有變化後進行編譯時,後面所有引用它的類都需要重新編譯,如果引用最開始的標頭檔案的類很多的話,那麼這將耗費大量的時間,而用@class則不會,可能有人會想即然.h只是用@class只是簡單的一個宣告告編譯器有這個類不讓其報錯,那麼.m中要用到引入的類的方法和屬性時,不還是要#import標頭檔案一次,是的這個是對的,但編譯器編譯的時候只編譯標頭檔案的,所以你的.m中用#import與編譯時間沒太大關係

3.接下來說說什麼時候該用@class,什麼時候該用#import進行宣告,

  (1)一般如果有繼承關係的用#import,如B是A的子類那麼在B中宣告A時用#import

  (2) 另外就是如果有迴圈依賴關係,如:A->B,B->A這樣相互依賴時,如果在兩個檔案的標頭檔案中用#import分別宣告對方,那麼就會出現標頭檔案迴圈利用的錯誤,這時在標頭檔案中用@class宣告就不會出錯

    最重要的來了  如果用了@class 你還是想呼叫@class類裡的方法或者成員變數   你需要要在  在呼叫類中的.m檔案中  在import一下被呼叫類

比如A類想要應用B類裡的方法,你需要在A類的.h中@classB  然後子啊A類的.m中  在importB  就可以了