Objective C类扩展 - 如何用readwrite方法覆盖readonly?

时间:2014-09-04 22:40:43

标签: objective-c macos class-extensions

我无法理解如何使用类扩展中编写的readwrite方法覆盖readonly方法。我的头文件中有一个readonly方法,在我的实现文件中,我尝试使用类扩展来覆盖它。我刚刚在这个帖子中询问了这个问题,其中包含了我所指的代码:Having trouble with class extension in Objective C, mac OS. Getting error 'NSInvalidArgumentException', no visible @interface declares the selector

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

1 个答案:

答案 0 :(得分:0)

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

在编辑后确定。

方法略有不同。 你在谈论房产。 Objective-C中的属性基本上是声明一个ivar或实例变量,它将(通常)具有标准的setter和getter方法。那些设定或获得伊娃的价值。

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

实施例。

In .h

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

In .m
@interface Cat ()
@property NSInteger countOfCatTails;
@end