天天看點

#include,#import,@class的差別

#include

       #include <> :用于對 系統檔案的引用,編譯器會在系統檔案目錄下去查找該檔案。

       #include "xx.h":用于對使用者自定義的檔案的引用,編譯器首先會去使用者目錄下查找,然後去安裝目錄,最後去系統目錄查找。

      注:使用include要注意重複引用的問題:

      class A,class B都引用了class C,class D若引用class A與class B,就會報重複引用的錯誤。

#import

     功能與include基本相同,不過它避免了重複引用的問題。是以在OC中我們基本用的都是import。

@class

     @class就是告訴編譯器有這個類存在,但是類是如何實作的不用告訴編譯器.若.m檔案用到了這個類,還是要在.m檔案彙總import這個類的。

     既然這樣,為什麼不直接在頭檔案中import呢,舉個例子:

     class A引用了class B,class B引用了class C.... , class A,B,C...的頭檔案又import了很多檔案,那麼 import了A的話,編譯器就需要編譯大量的檔案,編譯時間就會增加。

     難道頭檔案中都是用@class嗎?當然不是,有時也是需要#import的,那麼什麼時候該用什麼呢?

(1)一般如果有繼承關系的用#import,如B是A的子類那麼在B中聲明A時用#import;

(2) 另外就是如果有循環依賴關系,如:A->B,B->A這樣互相依賴時,如果在兩個檔案的頭檔案中用#import分别聲明對方,那麼就會出現頭檔案循環利用的錯誤,這時在頭檔案中用@class聲明就不會出錯;

(3)還有就是自定義代理的時候,如果在頭檔案中想聲明代理的話如@interface SecondViewController:UIViewController時應用#import不然的話會出錯誤,注意XXXXDelegate是自定義的。

繼續閱讀