天天看點

Objective-C之@class的使用

【掌握】@class基本概念

【掌握】@class其它應用場景

【掌握】@class和#import

【必知】@calss的使用易錯注意事項

【必知】@class的使用總結

作用

可以簡單地引用一個類

簡單使用

@class dog;

僅僅是告訴編譯器:dog是一個類;并不會包含dog這個類的所有内容

具體使用

在.h檔案中使用@class引用一個類

在.m檔案中使用#import包含這個類的.h檔案

對于循環依賴關系來說,比方a類引用b類,同時b類也引用a類

這種嵌套包含的代碼編譯會報錯

當使用@class在兩個類互相聲明,就不會出現編譯報錯

作用上的差別

#import會包含引用類的所有資訊(内容),包括引用類的變量和方法

@class僅僅是告訴編譯器有這麼一個類, 具體這個類裡有什麼資訊, 完全不知

效率上的差別

如果有上百個頭檔案都#import了同一個檔案,或者這些檔案依次被#import,那麼一旦最開始的頭檔案稍有改動,後面引用到這個檔案的所有類都需要重新編譯一遍 , 編譯效率非常低

相對來講,使用@class方式就不會出現這種問題了

總結

使用import效率低下的緣故:

Objective-C之@class的使用

@class的使用提高編譯效率的緣故:

Objective-C之@class的使用

如果兩個類互相拷貝,如果在兩個類的.h檔案中使用import互相調用,就會出現死循環。是以解決方案也是在兩個.h檔案中用@class; ,然後在.m檔案中import導入需要的類。這樣能很好的避免死循環的編譯。

<1>在h頭檔案中使用@class之後,然後在m實作檔案中使用@import注意導入的順序,一般所在實作檔案的對應的頭檔案是放在最下面的。

Objective-C之@class的使用

<2>子類不能在h檔案中通過@class導入所繼承的父類。

Objective-C之@class的使用

如果h頭檔案沒有涉及@class所告訴編譯器的類的屬性和方法,就可以使用@class,然後在對應的m實作檔案#import需要用到的類。

繼續閱讀