如何覆盖超类中的只读属性

时间:2013-07-25 00:40:11

标签: objective-c inheritance properties

我在superclass.h中定义了一个属性:

@property (nonatomic, retain, readonly) NSArray *objects;

我无法访问.m文件。

在我的子类中,有些情况下我需要写入此objects属性。

我尝试了以下两种解决方案:

  1. 在我的子类中声明一个名为readwrite的重写objects属性。但是,当关于超类中的setObjects setter调用[super viewDidLoad]时,这会给我一个错误。

  2. 在我的子类中声明一个不同的属性 - commentObjects - 并包含一个标志,以使用超类'objects数组属性或此子类属性。有时候使用超类加载的对象是好的,但有些我需要使用我的子类加载的对象。这确实有效,但是非常混乱,只是看起来像使用两个不同命名属性的不良设计用于相同的数据。

  3. 有没有办法只使用一个属性来做到这一点?

1 个答案:

答案 0 :(得分:1)

您可以稍微扩展第二种方法:而不是包含BOOL标志来指示要使用的属性,覆盖属性的getter以返回objects的值超类,或您自己的可设置commentObjects属性的值:

-(NSArray*)objects {
    return usecCmmentObjects ? commentObjects : [super objects];
}