Obj-C中的@class

在《Objective-C 基礎教程》中有寫到,爲了減少由依賴關係引起的重新編譯所帶的影響,Objective-C引入了關鍵字@class來告訴編譯器:“相信我,以後你會知道這個類到底是什麼,但是現在,你只需要知道這些。”
它並不需要知道關於這個類的更多信息,只要瞭解它是通過指針引用即可。
如下例所視:
#import
@class Tire;
@class Engine;
@interface Car : NSObject
{
Tire *tires[4];
Engine *engine;
}
- (void) setEngine: (Engine *) newEngine;
- (Engine *) engine;
 
- (void) setTire: (Tire *) tire
atIndex: (int) index;
- (Tire *) tireAtIndex: (int) index;
- (void) print;
@end // Car


爲什麼要用@class Tire;和@class Engine;呢?
如果此處用#import來導入Tire.h和Engine.h的話,編譯器會獲得這兩個類的大量信息,上例中,只是通過指針引用了Tire和Engine。這是@Class可以完成的工作。

如果有循環依賴關係,@class也很有用,即,A類使用B類,B類也使用A類。如果試圖通過#import語句讓這兩個類相互引用,那麼最後就會出現編譯錯誤,但是如果在A.h中使用@classB,在B.h中使用@classA,那麼這兩個類就可以相互引用了。

這樣做的好處是:會減少#import帶來的變異錯誤,並且速度也快

發佈了68 篇原創文章 · 獲贊 6 · 訪問量 2萬+
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章