首頁  >  問答  >  主體

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

看到有说是代理:

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

天蓬老师天蓬老师2714 天前582

全部回覆(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
  • 取消回覆