在Objective-C中进行属性重写有什么害处?
|
在几种情况下,您可能会覆盖超类的属性。
您声明的属性与其属性名称和属性相同
(因为您更改了
属性可以得到一个编译器
警告)。您可以合成
与您创建的ivar。什么是
使用这个?还是有什么害处
可以吗
如果超类在类扩展中声明了属性(类别
没有名称),则可能不是
在头文件中。如果你不
从标题知道那个属性
文件,您可以声明相同的名称
具有什么属性或
你想要的课。但是
setter / getter方法将被覆盖
那个“秘密财产”。
我认为这只会有害。但
因为你不知道标题
文件,如何避免这种情况?
您可以在头文件中将属性声明为\“ readonly \”,然后在
类扩展将其声明为
\“ readwrite \”。我认为这是
它可以做的情况。
我对这些情况的理解正确吗?我不知道第一种情况和第二种情况可以做些什么。但是,如果要避免出现第一种情况,可以在声明子类之前先检查该子类是否已具有该属性。但是,如果该属性不在公共头文件中(如第二种情况),我就是不知道该怎么办。
没有找到相关结果
已邀请:
2 个回复
阀傻
要么:
虽然看起来还不错,但是像这样的内存管理样板代码变得非常古老,非常快。或者,我们可以将上面的示例实现为具有保留语义的私有属性。这意味着,无论如何,我们只需要:
一段时间后,这在眼睛和手指上容易得多。您正确地指出,由于此属性对于Universe的其余部分不可见,因此它可能会被子类意外覆盖。在Objective-C中进行开发时,这是固有的风险,但是您可以采取措施使风险逐渐减小。这些措施是可预测地修改私有财产名称的变体。您可以在这里走无限路:举例来说,例如,您将私人财产名称的首字母缩写和下划线添加为个人政策。对我来说,我会得到诸如
以及相应的corresponding5ѭ和
访问器的信息。是的,从统计学上讲,有人可能会偶然出现并意外覆盖该名称,但实际上,他们不会。尤其是如果您可以将自己的实践发布给可能使用您的代码的人。而且,我可以肯定地说,苹果并没有四处走走,也没有制造出以这种方式被破坏的私有财产,因此您在这方面也将很安全。 公开只读,私有读写 这只是标准做法。您是正确的,因为它很有用,而且因为该属性位于标题中,所以它也不危险。任何人无意中推翻它都只能怪自己。
锯康