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

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

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

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

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

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

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

一般來說,導入objective c的頭文件時用#import,

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

包含c/c++頭文件時用#include。

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

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

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

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

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

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

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

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

在使用#include的時候要注意處理重復引用

@class

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

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

在interface中引用一個類,就用@class,它會把這個類作為一個類型來使用,而在實現(xiàn)這個interface的文件中,如果需要引用這個類的實體變量或者方法之類的,還是需要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時應用#import不然的話會出錯誤,注意XXXXDelegate是自定義的。

預編譯指令

#import由gcc編譯器支持

在 Objective-C 中,#import 被當成 #include 指令的改良版本來使用。

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

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

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

@ClassB

ClassB *pointer;

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

#import ClassB.h 相當于#include整個.h頭文件。如果有很多.m文件#import ClassA.h,那么編譯的時候這些文件也會#import ClassB.h增加了沒必要的#import,浪費編譯時間。在大型軟件中,減少.h文件中的include是非常重要的。

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

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

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

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

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

廣告

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

成都網(wǎng)頁設計公司