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