何时何地放置@class声明

时间:2010-07-15 18:52:46

标签: iphone objective-c xcode class

我正在开发一个包含多个自定义类的项目。我有一个CardModel(NSObject),它有一些整数属性来保存数据,还有一个Deck(NSObject),它有一个数组来保存一堆CardModels,然后是{{1我从({1}}中选择CardView后,将CardModel作为属性的(UIView)。然后我在CardModel上移动了一堆Deck

我的问题是关于何时何地使用UIViewControllers编译器指令。

如果我通过创建一个新文件并对其进行子类化来对UINavigationController进行子类化,那么我应该使用@classUIViewController标题中的@class MyViewController并将其放入实际使用控制器的文件的标头(例如,当一个控制器要实例化另一个控制器类型并将其推送到堆栈时)。或者我是否需要使用它?是否只有在我实际向我的类中添加新属性时才需要超出库存实现中的属性?好像我把MyViewController.h放在了所有地方,只是确保我没有得到错误,但我根本不能理解我什么时候需要它。

谢谢!

2 个答案:

答案 0 :(得分:8)

您在.h中使用它来通知自定义类,而不包括自定义类的.h。

实施例: 两个自定义类:Car and 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。

答案 1 :(得分:4)

当您需要标题来了解类但不想导入类的头文件时,使用@class指令;例如,当你需要避免循环依赖时。