可能重複:
@class May I know the proper use of this爲什麼在Objective-C是@class使用
我很奇怪,爲什麼使用@class。我有一個大概的理解,它允許你訪問你所調用的那個類的東西,但我不知道它的好處。
可能重複:
@class May I know the proper use of this爲什麼在Objective-C是@class使用
我很奇怪,爲什麼使用@class。我有一個大概的理解,它允許你訪問你所調用的那個類的東西,但我不知道它的好處。
@class
指令設置了對另一個類的前向引用。它告訴編譯器指定的類存在,所以當編譯器得到時,比如說一條@property
指令行,不需要額外的信息,它假定一切都很好,並且前進。
例如,該代碼將正常工作在它自己的:
#import <UIKit/UIKit.h>
#import "MyExampleClass"
@interface CFExampleClass : NSObject <SomeDelegate> {
}
@property (nonatomic, strong) MyExampleClass *example;
@end
但是,說我們要避免圓形,包括這些標題(例如:CFExampleClass
進口MyExampleClass
和MyExampleClass
進口CFExampleClass
),那麼我們可以用@class
告訴編譯器MyExampleClass
沒有任何抱怨。
#import <UIKit/UIKit.h>
@class MyExampleClass;
@interface CFExampleClass : NSObject <SomeDelegate> {
}
@property (nonatomic, strong) MyExampleClass *example;
@end
存在@class指令以避免創建循環依賴關係。
例如,如果A類需要訪問B類,而B類需要訪問A類,那麼您需要將A類導入B,將B導入A.
鏈接器將從類A到B類,然後從B到A,後者有這個參考,並且會無限期地做到這一點。
相反,通過不導入類,可以避免此問題。
它也刪除任何循環引用的機會。如果你在'MyClassB'中引用了'MyClassA',反之亦然,你將會得到一個錯誤。使用'@ class'可以讓編譯器知道這個類是否存在而不需要導入它。 –
是的,確切地說。我剛剛編輯過。謝謝。 – CodaFi
ahhhh roger that ..很酷!我應該回去通過我的代碼,並改變我的一些#imports大聲笑:P(我會很快接受你的回答) –