【问题标题】:Difference in setting up a class?设置班级的区别?
【发布时间】:2012-08-26 21:26:50
【问题描述】:

我的问题可能措辞不正确,但我不确定我所问的是否 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

??

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

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

【问题讨论】:

    标签: objective-c ios class implementation


    【解决方案1】:

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

    【讨论】:

      【解决方案2】:

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

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

      【讨论】:

        【解决方案3】:

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

        【讨论】:

          【解决方案4】:

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

          【讨论】:

            猜你喜欢
            • 1970-01-01
            • 2016-02-20
            • 2013-03-26
            • 1970-01-01
            • 1970-01-01
            • 2019-04-26
            • 2021-07-19
            • 2012-02-09
            • 1970-01-01
            相关资源
            最近更新 更多