我听说在Objective-C中调用处理程序(委托等)比在C ++中调用虚函数更快。这是真的吗?如果是这样,那怎么可能?
AFAIK,虚拟功能调用起来并不慢。至少,这是我对调用虚函数时会发生什么的理解:
vtbl
。uintptr_t
的倍数一样简单。call
指令。不幸的是,我不知道Objective-C所以我很难比较性能。但至少,虚函数调用的机制看起来并不那么慢,对吧?静态函数调用之外的其他东西怎么能更快?
答案 0 :(得分:5)
当然,这完全取决于实现。我不知道一个Obj-C方法调用是否比虚函数调用“更快”,但它肯定可以在球场上 - 这里有关于SO机制的讨论:
Objective C message dispatch mechanism
和Mike Ash在这里有更多:
http://www.mikeash.com/pyblog/friday-qa-2009-03-20-objective-c-messaging.html
底线是,可以缓存选择器,如果您正在调用的选择器在运行时缓存,则调度按虚函数调用的操作顺序进行。
此外: