看到有说是代理:
也有说OC中所有的函数都是虚函数,求真相!
欢迎选择我的课程,让我们一起见证您的进步~~
我之前寫過一篇相關的部落格http://www.cnblogs.com/sinkup/p/3496810.html,比較膚淺,有興趣可以瞧^_^ 至於代理(協定),就相當於用於多重繼承的類別…
我覺得吧,就是概念不同,但性質類似。
說代理是虛函數,根本就沒有搞清楚C++裡面的虛函數的意義是什麼。虛函數是C++實現多態的基礎,運行系統將根據物件的類型,自動地選擇適當的具體實現運行,沒有定為虛擬函數的方法將不具備此性質。
代理是一種委託,將一部分的功能,交予另外一個物件實現,實質是設計模式裡的委託模式,相比較代理模式要簡單一些。
說OC中的所有函數都是虛函數,也可以這麼理解,因為OC的訊息機制裡面就是有根據最近原則的調用,如果查找到了會cache方法,因此本類別的方法會先調用。當子類別的方法存在時,會有限地呼叫子類別的方法。
C++產生的是機器碼,因此C++需要虛函數來聲明方法,然後編譯器針對性的編譯實現函數的虛基表(實質就是一個代理,查找函數的實際地址)來實現多態性,實質如此實現也會帶來不小的效能損耗。而OC更動態一些,當然性能損耗也更厲害一些,不過這種性能損耗,帶來的是更靈活以及更簡單的實現,提高了開發效率。
我之前寫過一篇相關的部落格http://www.cnblogs.com/sinkup/p/3496810.html,比較膚淺,有興趣可以瞧^_^
至於代理(協定),就相當於用於多重繼承的類別…
我覺得吧,就是概念不同,但性質類似。
說代理是虛函數,根本就沒有搞清楚C++裡面的虛函數的意義是什麼。虛函數是C++實現多態的基礎,運行系統將根據物件的類型,自動地選擇適當的具體實現運行,沒有定為虛擬函數的方法將不具備此性質。
代理是一種委託,將一部分的功能,交予另外一個物件實現,實質是設計模式裡的委託模式,相比較代理模式要簡單一些。
說OC中的所有函數都是虛函數,也可以這麼理解,因為OC的訊息機制裡面就是有根據最近原則的調用,如果查找到了會cache方法,因此本類別的方法會先調用。當子類別的方法存在時,會有限地呼叫子類別的方法。
C++產生的是機器碼,因此C++需要虛函數來聲明方法,然後編譯器針對性的編譯實現函數的虛基表(實質就是一個代理,查找函數的實際地址)來實現多態性,實質如此實現也會帶來不小的效能損耗。而OC更動態一些,當然性能損耗也更厲害一些,不過這種性能損耗,帶來的是更靈活以及更簡單的實現,提高了開發效率。