iOS #include與#import的區別

來源:互聯網
上載者:User

標籤:ios   #import   #include   

#include  #import  @class   講解  

#include

區分#include <x.h>與#include "x.h"的作用
#include <x.h>:它用於對系統內建的標頭檔的引用,編譯器會在

系統檔案目錄下去尋找該檔案.
#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那麼在編譯的時候也會出現未知錯誤。

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

這個在@class中聲明的類。 

iOS #include與#import的區別

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.