我不认为我想要做的事情是可能的,但这里有人比我更狡猾,所以我想我会问反正....覆盖基类@property,同时仍允许基类访问它
想象一下我们有A类:
@interface A
@property (strong) NSArray *items;
// There'll be methods and stuff too
@end
现在,我们需要在更换下降该类改变一些行为方面:
@interface B : A
@property (strong) NSArray *items;
// There'll be methods and stuff too
@end
特别,我们覆盖th e“物品”属性,因为我们需要它来返回不同的东西。
这很好地运行,直到一个在B实例上调用的方法,它在A中实现并且未被B覆盖,试图访问“self.items”。而不是访问它自己的副本,它访问B的重写版本,从而看到意想不到的结果 - 并确实崩溃在我的真实情况下的应用程序:(
我可以通过重命名B中的属性来解决此问题 - 但此时不再这是一个耻辱
请注意,B类可以通过超级访问A的属性版本。理想情况下,任何从A类访问属性也会访问A的版本。有没有办法知道谁在请求它,例如?
Tim
当你说“A类中的某个方法试图访问”时,我认为你正在讨论一个在B实例上调用的方法,该实例在A中实现,而不是由B覆盖。是吗? A的实例无法使用B的访问器。 –
我不认为有可能做你想做的事。通过覆盖子类中的变量/方法,该类的所有实例都将使用适合该类的方法,而不是调用方法所在的方法。 –
乔希 - 是的,我已经更新了这个问题,以便更清楚。 – tarmes