Objective C 类扩展 - 如何用 readwrite 方法覆盖只读?
Posted
技术标签:
【中文标题】Objective C 类扩展 - 如何用 readwrite 方法覆盖只读?【英文标题】:Objective C class extensions- how to overwrite readonly with readwrite method? 【发布时间】:2014-09-04 22:40:43 【问题描述】:我无法理解如何使用在类扩展中编写的 readwrite 方法覆盖 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 是我正在使用的另一个来源,它让我相信我应该能够使用类扩展名使用 readwrite 属性覆盖头文件中声明的只读属性。如果我错了,请纠正我,我是一个完全新手,只是想弄清楚基础知识。
【问题讨论】:
呃,什么是“读写方法”? 对不起我的意思是属性,读写的意思有一个默认的getter和setter。 【参考方案1】:诀窍是不要覆盖。 你覆盖。 您编写一个只读方法来添加您需要的任何处理,然后调用 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
【讨论】:
对不起,我很难理解你在说什么,我不习惯很多编码术语。 “添加任何处理”是什么意思?另外,当您说“返回该结果”时,您指的是什么结果?最后,括号里指的是什么? 这正是我所拥有的,但我得到了错误,'no visible @interface for "XYZPerson" 声明了选择器 "setHeight"。' 我在原始问题中链接了代码,“在 Objective C、mac OS 中遇到类扩展问题。出现错误 'NSInvalidArgumentException',没有可见的@interface 声明选择器”以上是关于Objective C 类扩展 - 如何用 readwrite 方法覆盖只读?的主要内容,如果未能解决你的问题,请参考以下文章
如何用XCode创建Objective-c和C++的混编工程?