iOS include與 import的區別

2021-07-10 20:13:11 字數 1197 閱讀 5693

#include  #import  @class   講解  

#include

區分#include 與#include "x.h"的作用

#include :它用於對系統自帶的標頭檔案的引用,編譯器會在

系統檔案目錄下去查詢該檔案.

#include "x.h":使用者自定義的檔案用雙引號引用,編譯器首先會

在使用者目錄下查詢,然後到安裝目錄中查詢,最後在系統檔案中查詢。

在使用#include的時候要注意處理重複引用(這也是objc中#include與#import的區別)

例如:classa與classb同時引用了classc,不做重複引用處理的時候在classd中同時引用classa,classb編譯會提示對classc重複引用的錯誤.

我們可以:#ifndef _classc_h#define _classc_h

#include "classc"

#endif這樣處理在編譯時就不會有重複引用的錯誤出現(在objc中

#import解決了這個問題,這是它們的區別)#import

#import大部分功能和#include是一樣的,但是他處理了重複引用的問題,我們在引用檔案的時候不用再去自己進行重複引用處理.

@class

主要是用於宣告乙個類,告訴編譯器它後面的名字是乙個類的名字,而這個類的定義實現是暫時不用知道的,後面會告訴你.也是因為在@class僅僅只是宣告乙個類,所以在後面的實現檔案裡面是需要去#import這個類,這時候才包含了這個被引用的類的所有資訊。

綜上所述#include,#import與@class的區別可以做一下理解:

#include與#import在引用乙個類的時候會包含這個類的所有資訊包括變數方法等,但是這樣做會對編譯效率造成影響.比如有100個類都#import了classa,那麼在編譯的時候這100個類都會去對classa處理.又比如a被b引用,b被c引用,c被d引用.....此時如果a被修改,那麼後面的b,c,d.....都需要重新進行編譯.還有乙個用法會引起編譯錯誤的就是在classa中#import classb 在classb中#import classa那麼在編譯的時候也會出現未知錯誤。

所以一般來說,在inte***ce中引用乙個類,就用@class,它會把這個類作為乙個型別來使用,而在實現這個inte***ce的檔案中,如果需要引用這個類的實體變數或者方法之類的,還是需要import

這個在@class中宣告的類。 

webpack中require和import的區別

經典的commonjs同步語法如下 var a require a a.show 此時webpack會將a.js打包進引用它的檔案中。這是最普遍的情形,不必贅述。在commonjs中有乙個modules async a規範,裡面定義了require.ensure語法。webpack實現了它,作用是可...

pycharm安裝多個虛擬環境後,import失敗

現象 本人有安裝多個虛擬環境。但匯入包時,總是各種報錯。但是我明明有安裝的,最後發現是環境變數沒有把pipenv的路徑加進去。加入環境變數 import sys print python s on s sys.version,sys.platform sys.path.extend c users ...

sas中csv等常用格式資料利用import匯入

csv格式資料是以逗號為分割符號的一種資料記錄形式,可以通過以下 匯入 import data in csv format proc import out work.exer2 datafile c users lenovo desktop exer1.csv repace run xls格式資料是...