#include,#import,@class的區別

來源:互聯網
上載者:User

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

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.