昨天這么一道題,實現(xiàn)班級信息管理系統(tǒng)
Teacher類碉考,屬性:姓名塌计、年齡、班級侯谁,方法:考試(exam:)
OurClass類锌仅,屬性:老師、學(xué)生墙贱,方法:添加學(xué)生和移除學(xué)生
這就涉及到了 Teacher 類和 OurClass 類兩個類之間循環(huán)引用的問題热芹,對于循環(huán)依賴關(guān)系來說,使用 #import 來引頭文件惨撇,嵌套包含的代碼就會報錯伊脓,小主好方。那這時候我們 @class 關(guān)鍵字就派上用場了魁衙。
通常引用類有兩個方法:1报腔、#import方式引入?
? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ?2、@class引入
首先小主先介紹一下 #import 及 @class
#import
把要引用的頭文件的所有內(nèi)容拷貝到引用 #import 處纺棺。
@class:(關(guān)鍵字)
可以簡單地引用一個類,僅僅告訴編譯器 Person 是一個類邪狞,并不會包含這個類的所有內(nèi)容祷蝌,并不會去檢測類有哪些方法和屬性。
這樣解釋之后很明顯帆卓,當(dāng)我們有一個頭文件 Person.h巨朦,如果用 #import 來引用頭文件,如果 Person.h 文件內(nèi)容發(fā)生變化剑令,所有引用 Person.h 的類都需要重新編譯糊啡,實際開發(fā)中效率會很低。而我們用 @Class來 引用類吁津,如果 Person.h 文件內(nèi)容發(fā)生了改變棚蓄,引用該頭文件的類不需要重新編譯堕扶。
@class 的具體用法:
先上圖
那有人就會有疑問,講半天使用 @class 引用類梭依,引用這個類的類不能調(diào)用屬性稍算、實例變量和方法,還講什么效率役拴。
是這樣的
我們需要在:
Teacher.h 中寫 @classPerson
Teacher.m 中寫 #import"Person.h" ?// 如果需要用到被引用類的實例變量或方法糊探,需在使用時 #import 方式引用一次
.m 文件只有在運行時才編譯實現(xiàn)方法,這樣引用頭文件就算是改變了 Person.h 中 的內(nèi)容也是只有在實現(xiàn)方法的時候重新編譯河闰,比起直接用 #import 引用頭文件效率至少提高一半科平。
比起提高效率,@class 有特殊用法姜性,可以解決循環(huán)引入問題瞪慧,開篇有提到過。
對于循環(huán)依賴關(guān)系來說污抬,A 引用 B汞贸,B 引用 A,簡單來說就是 A 里有 B印机,B 里有 A矢腻,這種嵌套包含的代碼編譯就會報錯。
此時就要把 #import 改成 @class射赛,兩個類相互聲明就不會出現(xiàn)編譯報錯多柑。
最后小主再嘮叨一遍,@class 僅僅告訴編譯器有這么一個類楣责,具體類里有什么信息竣灌,引用過來也完全不知道。
為了提高效率實際開發(fā)中推薦使用 @class 引用頭文件秆麸。
@class Person;//不要忘了后面還有分號
希望大家看了分享能夠清楚兩種方式在作用上及效率上的一些區(qū)別初嘹。