在Objective-C中,如果我重寫一個使用類別的類方法,是否有方法可以調用原始方法(被覆蓋的方法)?如果我重寫一個類方法,是否有方法可以調用原始方法(被覆蓋的方法)?
2
A
回答
3
我向你介紹了三種可能的方法來做到這一點+(void)load
。在任何情況下,請將您的方法命名爲MyCategory_method。
- class_getMethodImplementation()和class_replaceMethod()。存儲舊的IMP,並直接調用它。您需要獲取方法的類型編碼。請注意,您也可以使用正常的C函數...
- class_getInstanceMethod(),method_getImplementation(),method_setImplementation()。如上所述,但您不需要獲取方法的類型編碼。
- 兩個方法上都有class_getInstanceMethod(),然後是method_exchangeImplementations()。調用MyCategory_method以獲取原始實現。這是最簡單的方法。
有時候,這是唯一合理的簡單的方法來讓它做你想要的...
編輯:也只有這樣做,如果你知道你在做什麼!
3
看起來不像是可能的。
當一個類別重寫一個繼承的方法時,類別中的方法可以像往常一樣通過消息調用繼承的實現super。但是,如果某個類別覆蓋了該類別中已有的方法,則無法調用原始實現。
這對我說的是,如果您通過類別覆蓋子類上的方法,您可以像往常一樣調用[super methodName],但是如果直接覆蓋基類方法,則不能調用原件。
+1
這是可能的,但不是沒有攪拌。但是,不要這樣做。最終,它會導致比解決問題更多的問題。 – bbum 2010-08-15 15:06:00
0
如果您動態提供類別覆蓋(請參閱resolveInstanceMethod :),則可以事先緩存上一個方法選擇器,然後調用它。
相關問題
- 1. 強制覆蓋方法,如果另一種方法被覆蓋
- 2. 調用覆蓋方法,超類調用覆蓋方法
- 3. 如果該方法引用原始方法,方法可以引用同一類中的方法
- 4. 沒有繼承的人如何重寫一個類方法並從新方法中調用原始方法?
- 5. C#中有什麼方法可以用擴展方法覆蓋類方法嗎?
- 6. 類的方法覆蓋另一個類的所有方法
- 7. JMockit中是否有方法從模擬方法調用原始方法?
- 8. 覆蓋繼承的原型方法並調用新的原始方法
- 9. 覆蓋超類的方法,以返回另一個supeclass方法
- 10. 我可以使用覆蓋非虛方法的方法嗎?
- 11. 是否可以編寫一個創建方法的方法?
- 12. 覆蓋方法,如果類是DLL
- 13. 如何從子類中的覆蓋方法調用父方法
- 14. 調用從覆蓋方法中覆蓋的方法在OO PHP
- 15. 我可以覆蓋doPost方法的servlet的方法,多次
- 16. 是否可以使用Dexmaker從現有類中覆蓋方法?
- 17. Java方法覆蓋 - 「方法不會覆蓋超級方法...」
- 18. 方法引用是否擺脫了可覆蓋的方法調用?
- 19. 我可以用特徵中的方法重寫一個scala類方法嗎?
- 20. 是否有可能檢測父方法是否被覆蓋?
- 21. Javascript覆蓋原型方法
- 22. 的Java類方法,方法調用()和原始類型
- 23. 我可以用相同的方法調用一個方法嗎?
- 24. 方法調用被重寫的另一個方法,該方法在子類中調用?
- 25. setDate方法覆蓋原始日期
- 26. 如果所有的python方法確實是非數據描述符,我可以覆蓋一個方法.__ get__?
- 27. C# - 調用覆蓋方法
- 28. 是否可以確定實例方法是否在原型方法中調用?
- 29. 如何覆蓋類方法
- 30. 覆蓋equals方法不會被調用
嗯,我想這回答我的問題,不幸;)認真,謝謝你的幫助! – BeachRunnerFred 2010-08-16 18:11:11