欧美bbbwbbbw肥妇,免费乱码人妻系列日韩,一级黄片

iOS開(kāi)發(fā)中class和#import的區(qū)別介紹

 更新時(shí)間:2018年02月16日 10:20:55   作者:mukekeheart  
這篇文章主要介紹了iOS開(kāi)發(fā)中class和#import的區(qū)別,非常不錯(cuò),具有參考借鑒價(jià)值,需要的朋友參考下吧

在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)文章

最新評(píng)論