#include / #import / @import / @class

#include

  1. 這是最原始的C語言中的導入頭文件的方法。其中根據系統尋找頭文件路徑的不同而有兩種語法:
  • #include <header.h>:主要用來引入庫的頭文件;
  • #include "header.h":主要用來引入自定義的頭文件。
  1. 有可能造成循環引用的問題。例如 A 引入了 B,B 又引入了 C,這時候就會報 C 重復定義的錯誤,如下圖:

頭文件重復引用.png

解決方式:如果都采用 #include 的方法,那就需要為每個頭文件中添加編譯開關,這在嵌入式編程的工程中很常見。具體語法見下圖:

編譯開關語法.png

錯誤解除。
不過在 iOS 開發中一般都使用 #import。

#import

#import 因為并不是像 #include 那樣簡單的將頭文件的內容進行復制,所以可以解決 #include 因為頭文件重復引用導致的重復定義的問題。不過它的交叉引用也會引發一些問題。比如,當 A 中import了 B,且 B 中又 import A,如果我們不創建任何變量,會發現編譯之后一切正常。但是,當我們在 A 中創建一個 B 的對象,則會報錯:

交叉引用

具體原因沒找到官方的說明,根據網上的資料,系統在加載 B 頭文件的定義時,因為其 import 了 A,所以又拐回來加載 A 頭文件,導致始終找不到 B 的完成定義,所以報錯。
這個時候我們就需要 @class 來解決問題了。

@class

@class 用來告訴編譯器,有這樣一個類,作用僅僅是在寫代碼時,編譯器不報錯,至于類里邊有哪些變量和方法,通過 @class 無法得知。@class 一般僅使用在 .h 文件中。

#import@class 的使用場景可按照以下規則記憶:

  1. 頭文件 .h 中:如果是引用 <strong>父類和遵守協議</strong>,則使用 #import;
  2. 實現文件 .m 中:實現文件中<strong>涉及到的所有類、協議以及接收消息的類</strong>都使用 #import;
  3. 其他情況使用 @class

@import

@import 是 Xcode 5 和 iOS 7.0 之后推出的一個新的導入頭文件的方式,這一年,蘋果提出了 <strong>模塊化(Module)</strong> 的概念,模塊化選項在之后的 Xcode 中的默認是開啟的。使用 @import 最大的好處就是:在project settings中不必手動添加 framework,而且在引入的時候還可以顯式的指定引用模塊中的某個子模塊,例如:@import UIKit.UIWindow;

模塊化選項

最后編輯于
?著作權歸作者所有,轉載或內容合作請聯系作者
平臺聲明:文章內容(如有圖片或視頻亦包括在內)由作者上傳并發布,文章內容僅代表作者本人觀點,簡書系信息發布平臺,僅提供信息存儲服務。

推薦閱讀更多精彩內容