Objective-c中@class和#import的區別

來源:互聯網
上載者:User

c/c++中使用#include來包含標頭檔,缺點就是同一個標頭檔可能被包含多次。
oc中使用了#import來包含標頭檔,優點就是同一個標頭檔只能包含一次。


@class#import是為瞭解決循環參考導致的死結問題

#import會包含這個類的所有資訊,包括實體變數和方法,而@class只是告訴編譯器,其後面聲明的名稱是類的名稱,至於這個類是如何定義的,暫時不用考慮,後面會再告訴使用者。

在類的聲明.h檔案中一般只需要知道被引用的類的名稱就可以了,不需要知道其內部的實體變數和方法,所以在類的聲明.h檔案中一般使用@class來聲明這個名稱是類的名稱。而在實作類別裡面。因為會用到這個引用類的內部的實體變數和方法,所以需要使用#import來包含這個被引用類的標頭檔。

如果有循環相依性關係,如:A->B,B->A這樣的相互依賴關係,如果使用#import來相互包含,那麼就會出現編譯錯誤,如果使用@class在兩個類的標頭檔中相互聲明,則不會有編譯錯誤出現。

所以一般來說@class是放在.h檔案中的,只是為了在.h中引用這個類,把這個類作為一個類型來引用的。在實現這個.h檔案的.m檔案中,如果需要引用這個類的實體變數或者方法之類的,還是要用#import。

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在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.