84669 person learning
152542 person learning
20005 person learning
5487 person learning
7821 person learning
359900 person learning
3350 person learning
180660 person learning
48569 person learning
18603 person learning
40936 person learning
1549 person learning
1183 person learning
32909 person learning
看到有说是代理:
也有说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更加动态一些,当然性能损耗也更厉害一些,不过这种性能损耗,带来的是更灵活以及更简单的实现,提高了开发效率。