iOS開發(fā)中class和#import的區(qū)別介紹
在iOS開發(fā)過程中,我們在一些源碼中經(jīng)常會看到導(dǎo)包的時(shí)候有的用#import進(jìn)行導(dǎo)包,但是有的的時(shí)候也會看到用@class進(jìn)行導(dǎo)包,那么這兩種方式有什么區(qū)別呢?
一 @class和#import的主要區(qū)別
首先說一下最主要的區(qū)別:
•使用#import引入一個(gè)類的頭文件,編譯時(shí)會將該類的頭文件中的所有信息都引入,包含屬性和方法;
•使用@class僅僅是告訴編譯器這是一個(gè)類,并不會因入該類的其他信息,而我們所關(guān)心的也僅此一點(diǎn),而不需要知道該類的內(nèi)部有哪些屬性和方法,因此使用@class可以提升編譯性能
二 @class的應(yīng)用場景
@class的應(yīng)用場景主要有兩種:
•一般情況下,我們在.h頭文件中使用@class,可以以提升編譯性能;而在.m實(shí)現(xiàn)文件中,往往就需要知道類的內(nèi)部信息了,這時(shí)就需使用#import來引入這些信息;在iOS的很多源文件的.h文件中很多都采用@class的方式進(jìn)行導(dǎo)包,例如在UIView.h文件中就有如下這樣的代碼:
@class UIBezierPath, UIEvent, UIWindow, UIViewController, UIColor, UIGestureRecognizer, UIMotionEffect, CALayer, UILayoutGuide;
•為了避免兩個(gè)類之間循環(huán)引用,我們在某一個(gè)類的.h文件中用@class進(jìn)行導(dǎo)入
下面著重說一下第二種場景,對于循環(huán)依賴關(guān)系來說,比方A類引用B類,同時(shí)B類也引用A類,例如下面這種情況,我們都用#import進(jìn)行這種嵌套引用的代碼在編譯時(shí)是會報(bào)錯(cuò)。
//A.h文件 #import "B.h" @interface A : NSObject @property (strong, nonatomic) B *_b; @end //B.h文件 #import “A.h" @interface B : NSObject @property (strong, nonatomic) A *_a; @end
為了解決這個(gè)問題,我們可以采用@class的方式進(jìn)行引用,一個(gè)用#import一個(gè)用@class,或者兩個(gè)都用@class都可以避免報(bào)錯(cuò)。
//A.h文件 @class B @interface A : NSObject @property (strong, nonatomic) B *_b; @end //B.h文件 @class A @interface B : NSObject @property (strong, nonatomic) A *_a; @end
總結(jié)
以上所述是小編給大家介紹的iOS開發(fā)中class和#import的區(qū)別介紹,希望對大家有所幫助,如果大家有任何疑問歡迎給我留言,小編會及時(shí)回復(fù)大家的!
相關(guān)文章
淺談iOS應(yīng)用中的相關(guān)正則及驗(yàn)證
下面小編就為大家?guī)硪黄獪\談iOS應(yīng)用中的相關(guān)正則及驗(yàn)證。小編覺得挺不錯(cuò)的,現(xiàn)在就分享給大家,也給大家做個(gè)參考。一起跟隨小編過來看看吧2017-04-04iOS實(shí)現(xiàn)選項(xiàng)卡效果的方法
選項(xiàng)卡在我們?nèi)粘i_發(fā)的時(shí)候經(jīng)常要用到,所以這篇文章給大家分享一種iOS實(shí)現(xiàn)的簡單選項(xiàng)卡效果,很適合大家學(xué)習(xí)和使用,有需要的可以參考借鑒,下面來一起看看吧。2016-09-09IOS開發(fā)教程之put上傳文件的服務(wù)器的配置及實(shí)例分享
IOS開發(fā)給人一種高大上的趕腳,弄的好像你不會IOS就不是個(gè)合格的程序員一樣,好吧,既然是大趨勢,那我們就來學(xué)習(xí)下吧,今天來看看put上傳文件的服務(wù)器配置及案例2014-06-06iOS App開發(fā)中用CGContextRef繪制基本圖形的基本示例
這篇文章主要介紹了iOS App開發(fā)中用CGContextRef繪制基本圖形的基本示例,CGContextRef同時(shí)可以進(jìn)行圖形顏色的填充以及文字的書寫,需要的朋友可以參考下2016-05-05