簡體   English   中英

何時何地放置@class聲明

[英]when and where to put @class declarations

我正在開發一個包含多個自定義類的項目。 我有一個CardModel (NSObject),它有一些整數屬性來保存數據,還有一個Deck (NSObject),它有一個數組來容納一堆CardModels ,然后是一個CardView (UIView),它有一個CardModel作為我做的屬性我從Deck選擇了一個CardModel 然后我有一堆UIViewControllers ,我在UINavigationController上移動。

我的問題是關於何時何地使用@class編譯器指令。

如果我通過創建一個新文件並對其進行子類化來@class MyViewController UIViewController ,我是否應該在MyViewController.h.m的頭文件中使用@class MyViewController並將其放入實際使用控制器的文件的標題中(如同一個controller將實例化另一個控制器類型並將其推送到堆棧中。 或者我是否需要使用它? 是否只有在我實際向我的類中添加新屬性時才需要超出庫存實現中的屬性? 好像我把@class所有地方只是為了確保我沒有得到錯誤,但我不需要從根本上理解我什么時候需要它。

謝謝!

您可以在.h中使用它來通知自定義類,而不包括自定義類的.h。

示例:兩個自定義類:Car和Wheel

Car.h
----------------
@interface Car : NSObject {
}
- (void)addWheel:(Wheel*)newWheel;
@end

Car.h不知道類'Wheel'所以它會拋出一個錯誤,所以你可以像這樣導入Wheel.h:

Car.h
----------------
#import "Wheel.h"

@interface Car : NSObject {
}
- (void)addWheel:(Wheel*)newWheel;
@end

但你也不需要這樣做。 Car.h不需要知道關於Wheel類的任何信息,它只需要知道它存在。 所以你使用的是@class只是說“嘿,這個類存在。請相信我的話。”

Car.h
----------------
@class Wheel;

@interface Car : NSObject {
}
- (void)addWheel:(Wheel*)newWheel;
@end

然后在Car.m內部,當你真正需要了解Wheel類(屬性,方法等)時,你應該在那里導入Wheel.h。

當你需要一個標題來了解一個類但你不想導入類的頭文件時,會使用@class指令; 例如,當你需要避免循環依賴時。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM