iOS開發(fā)中class和#import的區(qū)別介紹
在iOS開發(fā)過程中,我們在一些源碼中經(jīng)常會看到導(dǎo)包的時候有的用#import進(jìn)行導(dǎo)包,但是有的的時候也會看到用@class進(jìn)行導(dǎo)包,那么這兩種方式有什么區(qū)別呢?
一 @class和#import的主要區(qū)別
首先說一下最主要的區(qū)別:
•使用#import引入一個類的頭文件,編譯時會將該類的頭文件中的所有信息都引入,包含屬性和方法;
•使用@class僅僅是告訴編譯器這是一個類,并不會因入該類的其他信息,而我們所關(guān)心的也僅此一點(diǎn),而不需要知道該類的內(nèi)部有哪些屬性和方法,因此使用@class可以提升編譯性能
二 @class的應(yīng)用場景
@class的應(yīng)用場景主要有兩種:
•一般情況下,我們在.h頭文件中使用@class,可以以提升編譯性能;而在.m實(shí)現(xiàn)文件中,往往就需要知道類的內(nèi)部信息了,這時就需使用#import來引入這些信息;在iOS的很多源文件的.h文件中很多都采用@class的方式進(jìn)行導(dǎo)包,例如在UIView.h文件中就有如下這樣的代碼:
@class UIBezierPath, UIEvent, UIWindow, UIViewController, UIColor, UIGestureRecognizer, UIMotionEffect, CALayer, UILayoutGuide;
•為了避免兩個類之間循環(huán)引用,我們在某一個類的.h文件中用@class進(jìn)行導(dǎo)入
下面著重說一下第二種場景,對于循環(huán)依賴關(guān)系來說,比方A類引用B類,同時B類也引用A類,例如下面這種情況,我們都用#import進(jìn)行這種嵌套引用的代碼在編譯時是會報錯。
//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
為了解決這個問題,我們可以采用@class的方式進(jìn)行引用,一個用#import一個用@class,或者兩個都用@class都可以避免報錯。
//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ū)別介紹,希望對大家有所幫助,如果大家有任何疑問歡迎給我留言,小編會及時回復(fù)大家的!
相關(guān)文章
UIScrollView實(shí)現(xiàn)六棱柱圖片瀏覽效果
這篇文章主要為大家介紹了UIScrollView實(shí)現(xiàn)六棱柱圖片瀏覽效果示例詳解,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步,早日升職加薪2022-07-07
IOS點(diǎn)擊按鈕隱藏狀態(tài)欄詳解及實(shí)例代碼
這篇文章主要介紹了IOS點(diǎn)擊按鈕隱藏狀態(tài)欄詳解及實(shí)例代碼的相關(guān)資料,需要的朋友可以參考下2017-02-02
iOS基于CATransition實(shí)現(xiàn)翻頁、旋轉(zhuǎn)等動畫效果
這篇文章主要為大家詳細(xì)介紹了iOS基于CATransition實(shí)現(xiàn)翻頁、旋轉(zhuǎn)等動畫效果,具有一定的參考價值,感興趣的小伙伴們可以參考一下2019-04-04

