0

我可能没有正确地表达这个问题,但我不确定我所问的是否 100% 所以这里是:-)

在 Xcode 中,您可以在头文件中的 @interface 上方设置 @class(类名)。这与更改类名称中的 UIViewController 相同吗?请参见下面的代码:

这也是一样吗——

@class CoreDataClass;

@interface FlipsideViewController : UIViewController <UITableViewDataSource, UITableViewDelegate>
{

}

//This file declares the UITableView
@property (nonatomic, retain) IBOutlet UITableView *mainTableView;

@property (nonatomic, retain) CoreDataClass *cdc;

像这样:

@interface FlipsideViewController : CoreDataClass <UITableViewDataSource, UITableViewDelegate>
{

}

//This file declares the UITableView
@property (nonatomic, retain) IBOutlet UITableView *mainTableView;

@property (nonatomic, retain) NSManagedObjectContext *managedObjectContext;

@end

??

如果这不一样,它有什么不同,不同的实现有什么优势?

差异只是真正询问它们是否相似:-)

4

4 回答 4

3

@class 不是用来创建一个类,而是转发声明另一个类。请参阅此问题以获得很好的解释。

于 2012-08-26T21:33:00.853 回答
1

他们甚至没有关系。不同之处在于您的视图控制器的超类(“父”类)会有所不同(这可能会导致很好的无法识别的选择器错误......)。@class当不想为了引用一个类而导入整个框架头层次结构时,使用关键字前向声明一个类只是一种引用类的便捷方式。即,如果你不需要知道关于一个类的任何信息,只要它存在,你可以使用这个关键字。但是要小心,如果您大量使用该类 - 在这些情况下,类前向声明​​不被认为是一个好的解决方案。

于 2012-08-26T21:33:10.293 回答
1

它们根本不一样。第一种情况是“前向声明”——您告诉编译器存在 CoreDataClass 类,这样您就可以在头文件中引用它,而无需实际导入定义它的文件。

第二种情况,您声明 FlipsideViewController 是 CoreDataClass 的子类,并继承其所有方法和实例变量。

于 2012-08-26T21:33:12.403 回答
0

在第一种情况下,当您使用 @class 时,它会通知 XCode 您将在某处使用 CoreDataClass,并且您将在 .m 文件中使用 #import 标头,在第二种情况下,您将从 CoreDataClass 继承(您将可以访问所有公共和受保护的特性)

于 2012-08-26T21:33:01.690 回答