iOSimport,include和class的區(qū)別-創(chuàng)新互聯(lián)

#import 確定一個(gè)文件只能被導(dǎo)入一次,這使你在遞歸包含中不會(huì)出現(xiàn)問(wèn)題

創(chuàng)新互聯(lián)擁有十多年成都網(wǎng)站建設(shè)工作經(jīng)驗(yàn),為各大企業(yè)提供成都網(wǎng)站設(shè)計(jì)、網(wǎng)站制作服務(wù),對(duì)于網(wǎng)頁(yè)設(shè)計(jì)、PC網(wǎng)站建設(shè)(電腦版網(wǎng)站建設(shè))、成都App制作、wap網(wǎng)站建設(shè)(手機(jī)版網(wǎng)站建設(shè))、程序開(kāi)發(fā)、網(wǎng)站優(yōu)化(SEO優(yōu)化)、微網(wǎng)站、國(guó)際域名空間等,憑借多年來(lái)在互聯(lián)網(wǎng)的打拼,我們?cè)诨ヂ?lián)網(wǎng)網(wǎng)站建設(shè)行業(yè)積累了很多網(wǎng)站制作、網(wǎng)站設(shè)計(jì)、網(wǎng)絡(luò)營(yíng)銷經(jīng)驗(yàn),集策劃、開(kāi)發(fā)、設(shè)計(jì)、營(yíng)銷、管理等網(wǎng)站化運(yùn)作于一體,具備承接各種規(guī)模類型的網(wǎng)站建設(shè)項(xiàng)目的能力。

. import會(huì)包含這個(gè)類的所有信息,包括實(shí)體變量和方法(.h文件中)

在m文件中還是需要使用#import

一般如果有繼承關(guān)系的用#import

#import比起#include的好處就是不會(huì)引起交叉編譯、

一般來(lái)說(shuō),導(dǎo)入objective c的頭文件時(shí)用#import,

  2. 能在實(shí)現(xiàn)文件中#import,就不在頭文件中#import。

包含c/c++頭文件時(shí)用#include。

@class只是告訴編譯器,其后面聲明的名稱是類的名稱,至于這些類是如何定義的,后面會(huì)再告訴你。

2. 在頭文件中, 一般只需要知道被引用的類的名稱就可以了。 不需要知道其內(nèi)部的實(shí)體變量和方法,所以在頭文件中一般使用@class來(lái)聲明這個(gè)名稱是類的名稱。 而在實(shí)現(xiàn)類里面,因?yàn)闀?huì)用到這個(gè)引用類的內(nèi)部的實(shí)體變量和方法,所以需要使用#import來(lái)包含這個(gè)被引用類的頭文件。

 #import 就是把被引用類的頭文件走一遍,即把.h文件里的變量和方法包含進(jìn)來(lái)一次,且僅一次,而@class不用,所以后者編譯效率更高。

3. 在編譯效率方面考慮,當(dāng)最開(kāi)始的那個(gè)頭文件有變化的話,后面所有引用它的類都需要重新編譯,如果你的類有很多的話,而是用@class則不會(huì)。

4. 如果有循環(huán)依賴關(guān)系,,如果使用#import來(lái)相互包含,那么就會(huì)出現(xiàn)編譯錯(cuò)誤,如果使用@class在兩個(gè)類的頭文件中相互聲明,則不會(huì)有編譯錯(cuò)誤出現(xiàn)。

   3. 能在頭文件中@class+實(shí)現(xiàn)文件中#import,就不在頭文件中#import。

#include :它用于對(duì)系統(tǒng)自帶的頭文件的引用,編譯器會(huì)在系統(tǒng)文件目錄下去查找該文件.

         #include "x.h":用戶自定義的文件用雙引號(hào)引用,編譯器首先會(huì)在用戶目錄下查找,然后到安裝目錄中查找,最后在系統(tǒng)文件中查找。

在使用#include的時(shí)候要注意處理重復(fù)引用

@class

        主要是用于聲明一個(gè)類,告訴編譯器它后面的名字是一個(gè)類的名字,有這個(gè)類存在,而這個(gè)類的定義實(shí)現(xiàn)是暫時(shí)不用知道的,所以在后面的實(shí)現(xiàn)文件里面是需要去#import這個(gè)類,這時(shí)候才包含了這個(gè)被引用的類的所有信息,但是類是如何實(shí)現(xiàn)的不用告訴編譯器.若.m文件用到了這個(gè)類,還是要在.m文件匯總import這個(gè)類的。

#include與#import在引用一個(gè)類的時(shí)候會(huì)包含這個(gè)類的所有信息包括變量方法等,但是這樣做會(huì)對(duì)編譯效率造成影響.

在interface中引用一個(gè)類,就用@class,它會(huì)把這個(gè)類作為一個(gè)類型來(lái)使用,而在實(shí)現(xiàn)這個(gè)interface的文件中,如果需要引用這個(gè)類的實(shí)體變量或者方法之類的,還是需要import這個(gè)在@class中聲明的類。

 #include  <>    :用于對(duì)系統(tǒng)文件的引用,編譯器會(huì)在系統(tǒng)文件目錄下去查找該文件。

 #include "xx.h":用于對(duì)用戶自定義的文件的引用,編譯器首先會(huì)去用戶目錄下查找,然后去安裝目錄,最后去系統(tǒng)目錄查找。

@class

(2) 另外就是如果有循環(huán)依賴關(guān)系,如果在兩個(gè)文件的頭文件中用#import分別聲明對(duì)方,那么就會(huì)出現(xiàn)頭文件循環(huán)利用的錯(cuò)誤,這時(shí)在頭文件中用@class聲明就不會(huì)出錯(cuò);

(3)還有就是自定義代理的時(shí)候,如果在頭文件中想聲明代理的話如@interface SecondViewController:UIViewController時(shí)應(yīng)用#import不然的話會(huì)出錯(cuò)誤,注意XXXXDelegate是自定義的。

預(yù)編譯指令

#import由gcc編譯器支持

在 Objective-C 中,#import 被當(dāng)成 #include 指令的改良版本來(lái)使用。

@class一般用于頭文件中需要聲明該類的某個(gè)實(shí)例變量的時(shí)候用到,

只是@class ClassB 那就沒(méi)有include ClassB.h。僅需要在需要用到ClassB的ClassA.m文件中 #import ClassB.h

如果ClassA.h中僅需要聲明一個(gè)ClassB的指針,那么就可以在ClassA.h中聲明

@ClassB

ClassB *pointer;

在 Objective-C 中,#import 被當(dāng)成 #include 指令的改良版本來(lái)使用。除此之外,#import 確定一個(gè)文件只能被導(dǎo)入一次,這使你在遞歸包含中不會(huì)出現(xiàn)問(wèn)題。

#import ClassB.h 相當(dāng)于#include整個(gè).h頭文件。如果有很多.m文件#import ClassA.h,那么編譯的時(shí)候這些文件也會(huì)#import ClassB.h增加了沒(méi)必要的#import,浪費(fèi)編譯時(shí)間。在大型軟件中,減少.h文件中的include是非常重要的。

只是@class ClassB 那就沒(méi)有include ClassB.h。僅需要在需要用到ClassB的ClassA.m文件中 #import ClassB.h

如果ClassA.h中僅需要聲明一個(gè)ClassB的指針,那么就可以在ClassA.h中聲明@ClassB

另外有需要云服務(wù)器可以了解下創(chuàng)新互聯(lián)scvps.cn,海內(nèi)外云服務(wù)器15元起步,三天無(wú)理由+7*72小時(shí)售后在線,公司持有idc許可證,提供“云服務(wù)器、裸金屬服務(wù)器、高防服務(wù)器、香港服務(wù)器、美國(guó)服務(wù)器、虛擬主機(jī)、免備案服務(wù)器”等云主機(jī)租用服務(wù)以及企業(yè)上云的綜合解決方案,具有“安全穩(wěn)定、簡(jiǎn)單易用、服務(wù)可用性高、性價(jià)比高”等特點(diǎn)與優(yōu)勢(shì),專為企業(yè)上云打造定制,能夠滿足用戶豐富、多元化的應(yīng)用場(chǎng)景需求。

網(wǎng)站名稱:iOSimport,include和class的區(qū)別-創(chuàng)新互聯(lián)
本文地址:http://bm7419.com/article2/ipjoc.html

成都網(wǎng)站建設(shè)公司_創(chuàng)新互聯(lián),為您提供云服務(wù)器、品牌網(wǎng)站設(shè)計(jì)、網(wǎng)站制作、ChatGPT服務(wù)器托管、營(yíng)銷型網(wǎng)站建設(shè)

廣告

聲明:本網(wǎng)站發(fā)布的內(nèi)容(圖片、視頻和文字)以用戶投稿、用戶轉(zhuǎn)載內(nèi)容為主,如果涉及侵權(quán)請(qǐng)盡快告知,我們將會(huì)在第一時(shí)間刪除。文章觀點(diǎn)不代表本網(wǎng)站立場(chǎng),如需處理請(qǐng)聯(lián)系客服。電話:028-86922220;郵箱:631063699@qq.com。內(nèi)容未經(jīng)允許不得轉(zhuǎn)載,或轉(zhuǎn)載時(shí)需注明來(lái)源: 創(chuàng)新互聯(lián)

成都網(wǎng)頁(yè)設(shè)計(jì)公司