搜尋

首頁  >  問答  >  主體

c++ - Objective-C有虚函数的概念吗?

看到有说是代理:

也有说OC中所有的函数都是虚函数,求真相!

天蓬老师天蓬老师2767 天前612

全部回覆(2)我來回復

  • 大家讲道理

    大家讲道理2017-04-17 11:19:16

    我之前寫過一篇相關的部落格http://www.cnblogs.com/sinkup/p/3496810.html,比較膚淺,有興趣可以瞧^_^
    至於代理(協定),就相當於用於多重繼承的類別…

    我覺得吧,就是概念不同,但性質類似。

    回覆
    0
  • 高洛峰

    高洛峰2017-04-17 11:19:16

    說代理是虛函數,根本就沒有搞清楚C++裡面的虛函數的意義是什麼。虛函數是C++實現多態的基礎,運行系統將根據物件的類型,自動地選擇適當的具體實現運行,沒有定為虛擬函數的方法將不具備此性質。

    代理是一種委託,將一部分的功能,交予另外一個物件實現,實質是設計模式裡的委託模式,相比較代理模式要簡單一些。

    說OC中的所有函數都是虛函數,也可以這麼理解,因為OC的訊息機制裡面就是有根據最近原則的調用,如果查找到了會cache方法,因此本類別的方法會先調用。當子類別的方法存在時,會有限地呼叫子類別的方法。

    C++產生的是機器碼,因此C++需要虛函數來聲明方法,然後編譯器針對性的編譯實現函數的虛基表(實質就是一個代理,查找函數的實際地址)來實現多態性,實質如此實現也會帶來不小的效能損耗。而OC更動態一些,當然性能損耗也更厲害一些,不過這種性能損耗,帶來的是更靈活以及更簡單的實現,提高了開發效率。

    回覆
    0
  • 取消回覆