? ? 我們知道,通常在iOS編程中,我們會在.h文件中導入頭文件時用@class,而在.m文件中則用#import方法,今天我們就來講一講為什么要這么用吧
1.編譯性能方面
? ? 通常, 使用#import引入一個類的頭文件, 編譯時會將該類的頭文件中的所有信息都引入, 包含屬性和方法, 但有時候卻不需要這么多, 且包含這些信息會降低編譯性能.
而@class就表示這只是一個類而已, 我們所關心的僅此一點, 而不需要知道該類的內(nèi)部有哪些屬性和方法. 這種情況下, 我們在.h頭文件中就可以僅僅使用@class, 以提升編譯性能. 而在.m實現(xiàn)文件中, 往往就需要知道類的內(nèi)部信息了, 這時就需使用#import來引入這些信息.
在AFNetworking源碼中, 能夠看到非常多類似的情景. 如UIButton+AFNetworking.h:


關于編譯性能, 還有一點需要補充: 若類文件依次使用#import來引用, 則最開始的頭文件有變化, 則后續(xù)所有引用它的類都需要重新編譯.
而@class則不會有這個問題.
2.@class不會產(chǎn)生循環(huán)導入
? ? ?當A類導入B類頭文件,同時B類又導入A類頭文件時,如果使用@class不會報錯,但是如果使用#import則會報錯