c++ - Objective-C有虚函数的概念吗?
天蓬老师
天蓬老师 2017-04-17 11:17:16
0
2
632

看到有说是代理:

  • @optional - 虚函数
  • @required - 纯虚函数

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

天蓬老师
天蓬老师

欢迎选择我的课程,让我们一起见证您的进步~~

全部回覆(2)
大家讲道理

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

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

小葫芦

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

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

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

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

熱門教學
更多>
最新下載
更多>
網站特效
網站源碼
網站素材
前端模板