#import,#include與@class的區別

來源:互聯網
上載者:User

標籤:使用   檔案   問題   for   工作   時間   

1.
#include是C中用來引用檔案的關鍵字,而#import是obj-c中用來代替include的關鍵字。#import可以確保同一個檔案只能被匯入一次,從而避免了使用#include容易引起的重複引用問題,即classA引用了classC,classB也引用了classC,而當classD同時引用classA,classB的時候就會報重複引用的錯誤。

2.
#import""與#import<>:#import""實現從當前工作目錄中找要匯入的檔案,如果沒有再到系統類別庫中找,而#import<>是直接從系統類別庫中找要匯入的檔案。

3.
#import與@class:

@class只是告訴編譯器,後面遇到的這個名稱是一個類名稱,至於這個類是如何?的暫不用考慮。引入@class主要是用來解決引用死結--如果兩個類存在循環相依性關係,即A->B,B->A,如果用#import來相互包含,就會出現編譯錯誤:
Expected specifier-qualifier-list before ‘A’或者Expected specifier-qualifier-list before ‘B’。

一般情況下,在 .h檔案中,只需要知道類的名字就可以了,所以用@class,而在 .m檔案中通常需要知道類的成員變數即方法,所以要用#import來將類檔案導進來。

那為什麼不在 .h檔案中直接用#import來將類檔案匯入呢,因為如果匯入大量的標頭檔,編譯器就會花大量的時間來編譯。

需要在 .h檔案中用#import的情況:
1/如果有繼承關係的要用#import,如,A繼承B,需要在A中將B import進來。
2/使用有category的類,需要在 .h檔案中用#import將該類的category導進來。

聯繫我們

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