0

我无法理解如何用类扩展中编写的 readwrite 方法覆盖 readonly 方法。我的头文件中有一个只读方法,在我的实现文件中,我尝试使用类扩展来覆盖它。我刚刚在这个线程中询问了这个问题,我在其中包含了我所指的代码:Objective C, mac OS 中的类扩展遇到问题。收到错误“NSInvalidArgumentException”,没有可见的@interface 声明选择器

这里:Objective-C Succinctly:Categories and Extensions是我正在使用的另一个来源,它让我相信我应该能够使用类扩展名使用 readwrite 属性覆盖头文件中声明的只读属性。如果我错了,请纠正我,我是一个完全新手,只是想弄清楚基础知识。

4

1 回答 1

0

诀窍是你不要覆盖。你覆盖。您编写一个只读方法来添加您需要的任何处理,然后调用 super 并返回该结果或提供自定义结果。(引用您自己的 ivar 或属性或提供计算结果)

好的,在您的编辑之后。

方法略有不同。你说的是属性。Objective-C 中的属性基本上是声明一个 ivar 或实例变量,它(通常)具有标准的 setter 和 getter 方法。那些设置或获取 ivar 的值。

如果您的标头中有一个只读属性,或者从超类继承(使其在您的标头中有效),那么是的,在 .m 或实现文件中将属性重新声明为读写是一种常见的做法。您添加一个类扩展部分。类扩展基本上是类上的一个未命名的类别。

例子。

In .h

@interface Cat : NSObject <>
@property (readonly) NSInteger countOfCatTails;
@end

In .m
@interface Cat ()
@property NSInteger countOfCatTails;
@end
于 2014-09-04T23:23:18.823 回答