2012-05-30 54 views

回答

12

@class指令設置了對另一個類的前向引用。它告訴編譯器指定的類存在,所以當編譯器得到時,比如說一條@property指令行,不需要額外的信息,它假定一切都很好,並且前進。

例如,該代碼將正常工作在它自己的:

#import <UIKit/UIKit.h> 
#import "MyExampleClass" 

@interface CFExampleClass : NSObject <SomeDelegate> { 
} 

@property (nonatomic, strong) MyExampleClass *example; 

@end 

但是,說我們要避免圓形,包括這些標題(例如:CFExampleClass進口MyExampleClassMyExampleClass進口CFExampleClass),那麼我們可以用@class告訴編譯器MyExampleClass沒有任何抱怨。

#import <UIKit/UIKit.h> 
@class MyExampleClass; 

@interface CFExampleClass : NSObject <SomeDelegate> { 
} 

@property (nonatomic, strong) MyExampleClass *example; 

@end 
+2

它也刪除任何循環引用的機會。如果你在'MyClassB'中引用了'MyClassA',反之亦然,你將會得到一個錯誤。使用'@ class'可以讓編譯器知道這個類是否存在而不需要導入它。 –

+0

是的,確切地說。我剛剛編輯過。謝謝。 – CodaFi

+0

ahhhh roger that ..很酷!我應該回去通過我的代碼,並改變我的一些#imports大聲笑:P(我會很快接受你的回答) –

4

存在@class指令以避免創建循環依賴關係。

例如,如果A類需要訪問B類,而B類需要訪問A類,那麼您需要將A類導入B,將B導入A.
鏈接器將從類A到B類,然後從B到A,後者有這個參考,並且會無限期地做到這一點。

相反,通過不導入類,可以避免此問題。

相關問題