首页 > Objective-C有虚函数的概念吗?

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

看到有说是代理:

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


我之前写过一篇相关的博客http://www.cnblogs.com/sinkup/p/3496810.html,比较肤浅,有兴趣可以瞧瞧^_^
至于代理(协议),就相当于用于多重继承的类……

我觉得吧,就是概念不同,但性质类似。


说代理是虚函数,根本就没有搞清楚C++里面的虚函数的意义是什么。虚函数是C++实现多态的基础,运行系统将根据对象的类型,自动地选择适当的具体实现运行,没有定为虚函数的方法将不具备此性质。

代理是一种委托,将一部分的功能,交予另外一个对象实现,实质是设计模式里的委托模式,相比较代理模式要简单一些。

说OC中的所有函数都是虚函数,也可以这么理解,因为OC的消息机制里面就是有根据最近原则的调用,如果查找到了会cache方法,因此本类的方法会先调用。当子类的方法存在时,会有限调用子类的方法。

C++生成的是机器代码,因此C++需要虚函数来声明方法,然后编译器针对性的编译实现函数的虚基表(实质就是一个代理,查找函数的实际地址)来实现多态,实质如此实现也会带来不小的性能损耗。而OC更加动态一些,当然性能损耗也更厉害一些,不过这种性能损耗,带来的是更灵活以及更简单的实现,提高了开发效率。

【热门文章】
【热门文章】