#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是自定義的。