Objective-C中@class的目的

时间:2011-03-13 16:23:20

标签: objective-c ios4

我有以下代码

#import <UIKit/UIKit.h>
#import "SecondLevelViewController.h"
@class DisclosureButtonController;

@interface DisclosureButtonController : SecondLevelViewController {
    NSArray *list;
    DisclosureButtonController *childController;
}

@property (nonatomic, retain) NSArray *list;

@end

我无法得到什么

@class DisclosureButtonController;

的装置。

任何人都可以向我解释一下吗?

1 个答案:

答案 0 :(得分:3)

它只是告诉编译器DisclosureButtonController是在其他地方定义的Class

如果你删除它,你应该在DisclosureButtonController *childController;得到一个错误,因为编译器不知道你希望他在这一行做什么。

来自Apple Doc Defining a class

  

@class指令最大限度地减少了编译器和链接器看到的代码量,因此是提供类名前向声明的最简单方法。简单,它避免了导入导入其他文件的文件时可能出现的潜在问题。例如,如果一个类声明另一个类的静态类型实例变量,并且它们的两个接口文件相互导入,则两个类都不能正确编译。


编辑:我刚看到@class指令在那里是多余的,因为你在下一行声明了这个类。也许有一个@protocol@class@interface之间使用了该类。但在您的特殊情况下,您可以毫无问题地删除它。这是多余的。