【问题标题】:How to override a readonly property in superclass如何覆盖超类中的只读属性
【发布时间】:2013-07-24 16:54:18
【问题描述】:

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

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

我无权访问 .m 文件。

在我的子类中,在某些情况下我需要写入这个 objects 属性。

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

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

  2. 在我的子类中声明一个不同的属性 - commentObjects - 并包含一个标志以使用超类的 objects 数组属性或此子类属性。有时可以使用超类加载的对象,但有时我需要使用我的子类加载的对象。这确实有效,但是非常混乱,并且对同一数据使用两个不同命名的属性似乎是糟糕的设计。

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

【问题讨论】:

标签: objective-c inheritance properties


【解决方案1】:

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

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

【讨论】:

  • 我最终使用了这个版本。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2015-10-14
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多