Objective-C私有属性继承

时间:2014-03-31 17:35:07

标签: objective-c cocoa-touch inheritance

我只是想确保我对属性继承的理解是正确的。我目前正在尝试创建UIViewController的子类。在我的UIViewController中,所有我的出口等都在实现部分中声明如下:

@interface BaseClass()

@property (weak, nonatomic) IBOutlet UILabel *scoreLabel;

@end

那么这些属性是私有的,对吗?现在,当我尝试使用我的getter和setter创建一个子类并访问这些属性时,我无法从我的子类访问它们。是否在我的子类中再次重新声明这些属性的正确形式'实施部分,像这样?

@interface SubClass()

@property (weak, nonatomic) IBOutlet UILabel *scoreLabel;

@end

我想我可以这样做,但后来我觉得它破坏了继承的目的。什么是正确的方式/我做错了什么?

1 个答案:

答案 0 :(得分:1)

我会在BaseClass的公共接口中声明该属性 - 我认为没有理由将它们放在类扩展中。

@interface BaseClass : UIViewController

@property (weak, nonatomic) IBOutlet UILabel *scoreLabel;

@end

@interface SubClass : BaseClass

// No need to redeclare the property as you're inheriting it.

@end

<强> [编辑]

如果您必须使用类扩展,那么您可以使用私有标头来实现相同的目的。

BaseClass(BaseClass.h)的公共标头

@interface BaseClass : UIViewController

@end

BaseClass的私有标头(BaseClass-Private.h)

@interface BaseClass ()

@property (weak, nonatomic) IBOutlet UILabel *scoreLabel;

@end

SubClass(SubClass.h)的公共标头

#import "SubClass.h"

@interface SubClass : BaseClass

@end

SubClass(SubClass.m)的实现

#import "BaseClass-Private.h"

@implementation SubClass

@end