建立班级的不同之处?

时间:2012-08-26 21:26:51

标签: objective-c ios class implementation

我可能没有说明这个问题,但是我不确定我要问的是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 个答案:

答案 0 :(得分:3)

@class不用于创建类,而是用于转发声明另一个类。有关详细说明,请参阅this question

答案 1 :(得分:1)

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

答案 2 :(得分:1)

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

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

答案 3 :(得分:0)

在第一种情况下,当你使用@class时,告知XCode你将在某处使用CoreDataClass,你将在.m文件中#import header,在第二种情况下你将从CoreDataClass继承(你将获得所有访问权限)公共和受保护的财产)