【发布时间】:2013-10-19 16:51:53
【问题描述】:
我正在尝试创建一个抽象类并在子类中继承它的一些属性。如果我将属性保留在抽象类的头文件中,则所有属性都可以访问。问题是子类的实例也可以访问这些属性,这在我的情况下并不总是可取的。
例如,我的抽象类中有一个委托,它将按下按钮按下它的子类。我意识到这可能不是构建继承的最佳方式,因此欢迎提出其他建议。但是,我仍然想知道我的子类如何从它的超类继承一些属性,而不使所有这些属性在其实例中可用。提前致谢!
下面是一些示例代码:
@interface AbstractClass : UIView
@property (nonatomic, strong) id<ButtonDelegate>buttonDelegate;
@end
…
@protocol ButtonDelegate
@required
- (void) buttonWasPressed;
@end
…
@interface SubClass() <ButtonDelegate>
- (id)init {
self = [super init];
if (self) {
self.buttonDelegate = self;
}
return self;
}
-(void) buttonWasPressed {
[self doSomething];
}
…
@implementation ViewController
- (void)viewDidLoad {
SubClass *subClass = [[SubClass alloc] init];
subClass.buttonDelegate = self; // THIS IS NOT DESIRABLE
}
【问题讨论】:
-
看看 Apple 如何使用
UIGestureRecognizer做到这一点。 -
对不起,我应该对我所尝试的内容更彻底。我查看了 Apple 的实现(即私有属性的单独头文件),但这不是最佳解决方案,因为我的 Abstract 类中的属性对于子类正常运行至关重要。也感觉属性与类分离。
-
问题是Objective-C不支持受保护的方法或属性。这就是 Apple 使用单独的头文件的原因。
-
当你说“Objective-C 不支持受保护的方法或属性”时,我认为你一针见血。
标签: ios objective-c inheritance scope