如果我繼承CALayer
並覆蓋drawInContext:
方法,那麼一切都很好。如果我爲CALayer
創建一個類別,並重寫相同的方法(作爲子類化的替代方法),它將被調用,但不會繪製任何內容。當然,在這兩種情況下都會調用[super drawInContext:ctx]
。爲什麼?
我沒有問題的子類,我只是好奇爲什麼會發生這種情況。我的印象是,可以使用類別來添加或覆蓋任何類的方法,作爲創建整個子類的替代方法。
謝謝!CALayer的子類VS類別
1
A
回答
2
調用在一個類別super
實現調用它們放在你對,不是原來的對象實現的類對象的超這正是你正在嘗試做的。
super
當在實例方法中的方法調用的上下文中使用時,調用超類的該方法的實現。
在一個類別中,您還沒有創建子類 - 您編寫的代碼直接由您所屬類的類執行。因此調用super
的實現將被髮送到CALayer
的超類,它是NSObject
。
因此,當我在類別中嘗試此操作時沒有收到編譯器警告時,我感到有些驚訝。
這裏有此進一步討論優良:Is calling super in a category the same as calling it in a subclass?
的+0
還應該注意的是,使用類別來覆蓋框架類的方法幾乎肯定是一個壞主意。 _類的每個實例都使用重寫的方法,無論是由您還是其他人創建。 –
相關問題
- 1. Calayer子類問題
- 2. drawLayer不叫子類的CALayer
- 3. jquery類別子類別,子類別等
- 4. CALayer子類重複動畫
- 5. IB插件CALayer子類
- 6. 良好的樣式:類型別名VS子類空類/性狀
- 7. 的類別和子類別
- 8. Django的類別,子類別和子子類別
- 9. MySql,產品的可選類別,子類別和子子類別
- 10. 循環的子類別,子類別等
- 11. 職位類別VS事件類別
- 12. 類別/子類別:如何獲得給定類別的所有子類別(它們的子類別)?
- 13. 標籤VS類別
- 14. 我的sql多個類別 - 子類別 - 子類別
- 15. MySQL僅選擇擁有子類別或子類別的類別
- 16. 類別/子類別下拉
- 17. 類別和子類別
- 18. Django - 類別和子類別
- 19. Codeigniter:類別和子類別
- 20. 類別和子類別Android
- 21. 類別和子類別wordpress
- 22. 類別和子類別MVC2
- 23. Dropdownlist和類別子類別
- 24. 類別和子類別Rails
- 25. 類別和子類別
- 26. Laravel類別 - 子類別
- 27. 子類別和子/子類別的顯示類
- 28. 類別和子類
- 29. 子類和類別
- 30. 父類別和子類別帖子
可能重複的[選擇器發送到方法在類別中重寫失敗](http://stackoverflow.com/questions/7891822/selector-sent-to-method -overridden-in-category-failed) – jrturton
基本上,在一個類別中調用超級實現會調用它們對應的對象的超類,而不是原來的對象實現,而這正是您要做的。 – jrturton
哦,我明白了,我以爲我讀過某個稱爲原始方法的類中調用超級方法的地方,這聽起來很奇怪,但我隨之而來。我錯了:) – juandemarco