#import 確定一個文件只能被導(dǎo)入一次,這使你在遞歸包含中不會出現(xiàn)問題
. import會包含這個類的所有信息,包括實(shí)體變量和方法(.h文件中)
在m文件中還是需要使用#import
一般如果有繼承關(guān)系的用#import
#import比起#include的好處就是不會引起交叉編譯、
一般來說,導(dǎo)入objective c的頭文件時用#import,
2. 能在實(shí)現(xiàn)文件中#import,就不在頭文件中#import。
包含c/c++頭文件時用#include。
@class只是告訴編譯器,其后面聲明的名稱是類的名稱,至于這些類是如何定義的,后面會再告訴你。
2. 在頭文件中, 一般只需要知道被引用的類的名稱就可以了。 不需要知道其內(nèi)部的實(shí)體變量和方法,所以在頭文件中一般使用@class來聲明這個名稱是類的名稱。 而在實(shí)現(xiàn)類里面,因?yàn)闀玫竭@個引用類的內(nèi)部的實(shí)體變量和方法,所以需要使用#import來包含這個被引用類的頭文件。
#import 就是把被引用類的頭文件走一遍,即把.h文件里的變量和方法包含進(jìn)來一次,且僅一次,而@class不用,所以后者編譯效率更高。
3. 在編譯效率方面考慮,當(dāng)最開始的那個頭文件有變化的話,后面所有引用它的類都需要重新編譯,如果你的類有很多的話,而是用@class則不會。
4. 如果有循環(huán)依賴關(guān)系,,如果使用#import來相互包含,那么就會出現(xiàn)編譯錯誤,如果使用@class在兩個類的頭文件中相互聲明,則不會有編譯錯誤出現(xiàn)。
3. 能在頭文件中@class+實(shí)現(xiàn)文件中#import,就不在頭文件中#import。
#include :它用于對系統(tǒng)自帶的頭文件的引用,編譯器會在系統(tǒng)文件目錄下去查找該文件.
#include "x.h":用戶自定義的文件用雙引號引用,編譯器首先會在用戶目錄下查找,然后到安裝目錄中查找,最后在系統(tǒng)文件中查找。
在使用#include的時候要注意處理重復(fù)引用
@class
主要是用于聲明一個類,告訴編譯器它后面的名字是一個類的名字,有這個類存在,而這個類的定義實(shí)現(xiàn)是暫時不用知道的,所以在后面的實(shí)現(xiàn)文件里面是需要去#import這個類,這時候才包含了這個被引用的類的所有信息,但是類是如何實(shí)現(xiàn)的不用告訴編譯器.若.m文件用到了這個類,還是要在.m文件匯總import這個類的。
#include與#import在引用一個類的時候會包含這個類的所有信息包括變量方法等,但是這樣做會對編譯效率造成影響.
在interface中引用一個類,就用@class,它會把這個類作為一個類型來使用,而在實(shí)現(xiàn)這個interface的文件中,如果需要引用這個類的實(shí)體變量或者方法之類的,還是需要import這個在@class中聲明的類。
#include <> :用于對系統(tǒng)文件的引用,編譯器會在系統(tǒng)文件目錄下去查找該文件。
#include "xx.h":用于對用戶自定義的文件的引用,編譯器首先會去用戶目錄下查找,然后去安裝目錄,最后去系統(tǒng)目錄查找。
@class
(2) 另外就是如果有循環(huán)依賴關(guān)系,如果在兩個文件的頭文件中用#import分別聲明對方,那么就會出現(xiàn)頭文件循環(huán)利用的錯誤,這時在頭文件中用@class聲明就不會出錯;
(3)還有就是自定義代理的時候,如果在頭文件中想聲明代理的話如@interface SecondViewController:UIViewController時應(yīng)用#import不然的話會出錯誤,注意XXXXDelegate是自定義的。
預(yù)編譯指令
#import由gcc編譯器支持
在 Objective-C 中,#import 被當(dāng)成 #include 指令的改良版本來使用。
@class一般用于頭文件中需要聲明該類的某個實(shí)例變量的時候用到,
只是@class ClassB 那就沒有include ClassB.h。僅需要在需要用到ClassB的ClassA.m文件中 #import ClassB.h
如果ClassA.h中僅需要聲明一個ClassB的指針,那么就可以在ClassA.h中聲明
@ClassB
ClassB *pointer;
在 Objective-C 中,#import 被當(dāng)成 #include 指令的改良版本來使用。除此之外,#import 確定一個文件只能被導(dǎo)入一次,這使你在遞歸包含中不會出現(xiàn)問題。
#import ClassB.h 相當(dāng)于#include整個.h頭文件。如果有很多.m文件#import ClassA.h,那么編譯的時候這些文件也會#import ClassB.h增加了沒必要的#import,浪費(fèi)編譯時間。在大型軟件中,減少.h文件中的include是非常重要的。
只是@class ClassB 那就沒有include ClassB.h。僅需要在需要用到ClassB的ClassA.m文件中 #import ClassB.h
如果ClassA.h中僅需要聲明一個ClassB的指針,那么就可以在ClassA.h中聲明@ClassB
另外有需要云服務(wù)器可以了解下創(chuàng)新互聯(lián)scvps.cn,海內(nèi)外云服務(wù)器15元起步,三天無理由+7*72小時售后在線,公司持有idc許可證,提供“云服務(wù)器、裸金屬服務(wù)器、高防服務(wù)器、香港服務(wù)器、美國服務(wù)器、虛擬主機(jī)、免備案服務(wù)器”等云主機(jī)租用服務(wù)以及企業(yè)上云的綜合解決方案,具有“安全穩(wěn)定、簡單易用、服務(wù)可用性高、性價比高”等特點(diǎn)與優(yōu)勢,專為企業(yè)上云打造定制,能夠滿足用戶豐富、多元化的應(yīng)用場景需求。
網(wǎng)站名稱:iOSimport,include和class的區(qū)別-創(chuàng)新互聯(lián)
本文地址:http://aaarwkj.com/article2/ipjoc.html
成都網(wǎng)站建設(shè)公司_創(chuàng)新互聯(lián),為您提供云服務(wù)器、品牌網(wǎng)站設(shè)計、網(wǎng)站制作、ChatGPT、服務(wù)器托管、營銷型網(wǎng)站建設(shè)
聲明:本網(wǎng)站發(fā)布的內(nèi)容(圖片、視頻和文字)以用戶投稿、用戶轉(zhuǎn)載內(nèi)容為主,如果涉及侵權(quán)請盡快告知,我們將會在第一時間刪除。文章觀點(diǎn)不代表本網(wǎng)站立場,如需處理請聯(lián)系客服。電話:028-86922220;郵箱:631063699@qq.com。內(nèi)容未經(jīng)允許不得轉(zhuǎn)載,或轉(zhuǎn)載時需注明來源: 創(chuàng)新互聯(lián)
猜你還喜歡下面的內(nèi)容