iOS開(kāi)發(fā)中class和#import的區(qū)別介紹
在iOS開(kāi)發(fā)過(guò)程中,我們?cè)谝恍┰创a中經(jīng)常會(huì)看到導(dǎo)包的時(shí)候有的用#import進(jìn)行導(dǎo)包,但是有的的時(shí)候也會(huì)看到用@class進(jìn)行導(dǎo)包,那么這兩種方式有什么區(qū)別呢?
一 @class和#import的主要區(qū)別
首先說(shuō)一下最主要的區(qū)別:
•使用#import引入一個(gè)類的頭文件,編譯時(shí)會(huì)將該類的頭文件中的所有信息都引入,包含屬性和方法;
•使用@class僅僅是告訴編譯器這是一個(gè)類,并不會(huì)因入該類的其他信息,而我們所關(guān)心的也僅此一點(diǎn),而不需要知道該類的內(nèi)部有哪些屬性和方法,因此使用@class可以提升編譯性能
二 @class的應(yīng)用場(chǎng)景
@class的應(yīng)用場(chǎng)景主要有兩種:
•一般情況下,我們?cè)?h頭文件中使用@class,可以以提升編譯性能;而在.m實(shí)現(xiàn)文件中,往往就需要知道類的內(nèi)部信息了,這時(shí)就需使用#import來(lái)引入這些信息;在iOS的很多源文件的.h文件中很多都采用@class的方式進(jìn)行導(dǎo)包,例如在UIView.h文件中就有如下這樣的代碼:
@class UIBezierPath, UIEvent, UIWindow, UIViewController, UIColor, UIGestureRecognizer, UIMotionEffect, CALayer, UILayoutGuide;
•為了避免兩個(gè)類之間循環(huán)引用,我們?cè)谀骋粋€(gè)類的.h文件中用@class進(jìn)行導(dǎo)入
下面著重說(shuō)一下第二種場(chǎng)景,對(duì)于循環(huán)依賴關(guān)系來(lái)說(shuō),比方A類引用B類,同時(shí)B類也引用A類,例如下面這種情況,我們都用#import進(jìn)行這種嵌套引用的代碼在編譯時(shí)是會(huì)報(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è)問(wèn)題,我們可以采用@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開(kāi)發(fā)中class和#import的區(qū)別介紹,希望對(duì)大家有所幫助,如果大家有任何疑問(wèn)歡迎給我留言,小編會(huì)及時(shí)回復(fù)大家的!
相關(guān)文章
淺談iOS應(yīng)用中的相關(guān)正則及驗(yàn)證
下面小編就為大家?guī)?lái)一篇淺談iOS應(yīng)用中的相關(guān)正則及驗(yàn)證。小編覺(jué)得挺不錯(cuò)的,現(xiàn)在就分享給大家,也給大家做個(gè)參考。一起跟隨小編過(guò)來(lái)看看吧2017-04-04iOS逆向教程之動(dòng)態(tài)調(diào)試詳解
這篇文章主要給大家介紹了關(guān)于iOS逆向教程之動(dòng)態(tài)調(diào)試的相關(guān)資料,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧2018-06-06iOS實(shí)現(xiàn)選項(xiàng)卡效果的方法
選項(xiàng)卡在我們?nèi)粘i_(kāi)發(fā)的時(shí)候經(jīng)常要用到,所以這篇文章給大家分享一種iOS實(shí)現(xiàn)的簡(jiǎn)單選項(xiàng)卡效果,很適合大家學(xué)習(xí)和使用,有需要的可以參考借鑒,下面來(lái)一起看看吧。2016-09-09IOS開(kāi)發(fā)教程之put上傳文件的服務(wù)器的配置及實(shí)例分享
IOS開(kāi)發(fā)給人一種高大上的趕腳,弄的好像你不會(huì)IOS就不是個(gè)合格的程序員一樣,好吧,既然是大趨勢(shì),那我們就來(lái)學(xué)習(xí)下吧,今天來(lái)看看put上傳文件的服務(wù)器配置及案例2014-06-06iOS如何保持程序在后臺(tái)長(zhǎng)時(shí)間運(yùn)行
這篇文章主要為大家詳細(xì)介紹了iOS如何保持程序在后臺(tái)長(zhǎng)時(shí)間運(yùn)行,具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下2016-09-09iOS App開(kāi)發(fā)中用CGContextRef繪制基本圖形的基本示例
這篇文章主要介紹了iOS App開(kāi)發(fā)中用CGContextRef繪制基本圖形的基本示例,CGContextRef同時(shí)可以進(jìn)行圖形顏色的填充以及文字的書寫,需要的朋友可以參考下2016-05-05IOS動(dòng)畫效果源代碼整理(粒子、雪花、火焰、河流、蒸汽)
本篇文章給大家整理的IOS的關(guān)于動(dòng)畫的效果代碼整理,很多效果非常的好看,有興趣的學(xué)下。2018-01-01