是否可以強制Objective-C調用虛擬方法的特定實例,而不是通過標準虛擬消息調度?我知道這通常是一個糟糕的想法,但我想知道如何使用Objective-C運行時來完成它。例如,給定實現 - (void)foo的A和B類,其中B是A的子類,我想用B實例調用A上的foo方法(儘管B通常會處理這條信息)。非虛擬調用Objective-C函數
我知道我可以通過將A的foo方法的內容移動到一個新方法並委託給它來實現此目的,但我想找出通過Objective-C運行時執行此操作的一些方法。
注意:就本問題而言,假定我無法更改A或B的來源,並且我仔細權衡了破壞封裝的風險。
爲什麼'[超級富]'不適合您的需求?你對你想要的內容的描述正是「super」關鍵字所做的。編輯:哦,除非像bbum描述,你要調用' - 從_outside_ B'的'一個實例[A FOO]'。 –
是的,我想一般稱之爲 - 不一定是從B.我不能在這一點上改變A或B的內容。 – slipheed
的OP使得它聽起來就像他們對A(因此可能B)的控制,所以我有一種感覺'[超級富]'確實是最好/最簡單的答案。 – matthias