#include / #import / @import / @class

#include

  1. 這是最原始的C語言中的導(dǎo)入頭文件的方法。其中根據(jù)系統(tǒng)尋找頭文件路徑的不同而有兩種語法:
  • #include <header.h>:主要用來引入庫的頭文件;
  • #include "header.h":主要用來引入自定義的頭文件。
  1. 有可能造成循環(huán)引用的問題。例如 A 引入了 B,B 又引入了 C,這時(shí)候就會(huì)報(bào) C 重復(fù)定義的錯(cuò)誤,如下圖:

頭文件重復(fù)引用.png

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

編譯開關(guān)語法.png

錯(cuò)誤解除。
不過在 iOS 開發(fā)中一般都使用 #import

#import

#import 因?yàn)椴⒉皇窍?#include 那樣簡單的將頭文件的內(nèi)容進(jìn)行復(fù)制,所以可以解決 #include 因?yàn)轭^文件重復(fù)引用導(dǎo)致的重復(fù)定義的問題。不過它的交叉引用也會(huì)引發(fā)一些問題。比如,當(dāng) A 中import了 B,且 B 中又 import A,如果我們不創(chuàng)建任何變量,會(huì)發(fā)現(xiàn)編譯之后一切正常。但是,當(dāng)我們在 A 中創(chuàng)建一個(gè) B 的對(duì)象,則會(huì)報(bào)錯(cuò):

交叉引用

具體原因沒找到官方的說明,根據(jù)網(wǎng)上的資料,系統(tǒng)在加載 B 頭文件的定義時(shí),因?yàn)槠?import 了 A,所以又拐回來加載 A 頭文件,導(dǎo)致始終找不到 B 的完成定義,所以報(bào)錯(cuò)。
這個(gè)時(shí)候我們就需要 @class 來解決問題了。

@class

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

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

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

@import

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

模塊化選項(xiàng)

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時(shí)請結(jié)合常識(shí)與多方信息審慎甄別。
平臺(tái)聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡書系信息發(fā)布平臺(tái),僅提供信息存儲(chǔ)服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

  • Spring Cloud為開發(fā)人員提供了快速構(gòu)建分布式系統(tǒng)中一些常見模式的工具(例如配置管理,服務(wù)發(fā)現(xiàn),斷路器,智...
    卡卡羅2017閱讀 136,639評(píng)論 19 139
  • 1. Java基礎(chǔ)部分 基礎(chǔ)部分的順序:基本語法,類相關(guān)的語法,內(nèi)部類的語法,繼承相關(guān)的語法,異常的語法,線程的語...
    子非魚_t_閱讀 34,740評(píng)論 18 399
  • 一、#include與#import區(qū)別 1. #include <xxx.h> 2. #import <xxx....
    single_heart閱讀 5,490評(píng)論 7 14
  • 電影的開頭是從一個(gè)小孩子的視角開始的,新奇、有趣、歡快、輕松,簡單,就像是有魔力一般,瞬間帶給人一種無以言表的愉悅...
    春樹君啊閱讀 424評(píng)論 2 7
  • 倒數(shù)第二節(jié)發(fā)人深省的視譯課 小燕老師說了好多遍,She feels sorry for US. 每節(jié)課都深有感觸,...
    大小智哈閱讀 513評(píng)論 0 1

友情鏈接更多精彩內(nèi)容