【Objective-C】@class 介紹及使用注意事項

昨天這么一道題,實現班級信息管理系統

Teacher類,屬性:姓名、年齡、班級,方法:考試(exam:)

OurClass類,屬性:老師、學生,方法:添加學生和移除學生

這就涉及到了 Teacher 類和 OurClass 類兩個類之間循環引用的問題,對于循環依賴關系來說,使用 #import 來引頭文件,嵌套包含的代碼就會報錯,小主好方。那這時候我們 @class 關鍵字就派上用場了。

通常引用類有兩個方法:1、#import方式引入?

? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ?2、@class引入

首先小主先介紹一下 #import 及 @class

#import

把要引用的頭文件的所有內容拷貝到引用 #import 處。

@class:(關鍵字)

可以簡單地引用一個類,僅僅告訴編譯器 Person 是一個類,并不會包含這個類的所有內容,并不會去檢測類有哪些方法和屬性。

這樣解釋之后很明顯,當我們有一個頭文件 Person.h,如果用 #import 來引用頭文件,如果 Person.h 文件內容發生變化,所有引用 Person.h 的類都需要重新編譯,實際開發中效率會很低。而我們用 @Class來 引用類,如果 Person.h 文件內容發生了改變,引用該頭文件的類不需要重新編譯。

@class 的具體用法:

先上圖

Person.h
Teacher.h
Teacher.m

那有人就會有疑問,講半天使用 @class 引用類,引用這個類的類不能調用屬性、實例變量和方法,還講什么效率。

是這樣的

我們需要在:

Teacher.h 中寫 @classPerson

Teacher.m 中寫 #import"Person.h" ?// 如果需要用到被引用類的實例變量或方法,需在使用時 #import 方式引用一次

.m 文件只有在運行時才編譯實現方法,這樣引用頭文件就算是改變了 Person.h 中 的內容也是只有在實現方法的時候重新編譯,比起直接用 #import 引用頭文件效率至少提高一半。

比起提高效率,@class 有特殊用法,可以解決循環引入問題,開篇有提到過。

對于循環依賴關系來說,A 引用 B,B 引用 A,簡單來說就是 A 里有 B,B 里有 A,這種嵌套包含的代碼編譯就會報錯。

循環依賴關系

此時就要把 #import 改成 @class,兩個類相互聲明就不會出現編譯報錯。

最后小主再嘮叨一遍,@class 僅僅告訴編譯器有這么一個類,具體類里有什么信息,引用過來也完全不知道。

為了提高效率實際開發中推薦使用 @class 引用頭文件。

@class Person;//不要忘了后面還有分號

希望大家看了分享能夠清楚兩種方式在作用上及效率上的一些區別。

最后編輯于
?著作權歸作者所有,轉載或內容合作請聯系作者
平臺聲明:文章內容(如有圖片或視頻亦包括在內)由作者上傳并發布,文章內容僅代表作者本人觀點,簡書系信息發布平臺,僅提供信息存儲服務。

推薦閱讀更多精彩內容