我不認爲我想要做的事情是可能的,但這裏有人比我更狡猾,所以我想我會問反正....覆蓋基類@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