2
我聽說在Objective-C中調用處理程序(委託等)可能比在C++中調用虛函數還要快。這真的是對的嗎?如果是這樣,那又怎麼樣?虛擬函數並不是那麼慢的調用。至少,這是我對虛函數被調用時會發生什麼的理解:處理程序調用速度:Objective-C與虛函數
- 獲取指針到
vtbl
。 - 取消引用指針並獲取函數指針數組的開頭。
- 使用方法的索引偏移(以指針比例)數組的開始。考慮到編譯時已知該索引,就像添加
uintptr_t
的倍數一樣簡單。 - 發出
call
指令。
不幸的是,我不知道Objective-C,因此我很難比較性能。但至少,虛函數調用的機制看起來並不慢,對吧?靜態函數調用以外的其他方法如何更快?
先衡量,優化第二。如果你有一個情況,那就是objective-c消息調度的開銷實際上是CPU佔用率的很大一部分,我會非常驚訝的。它可能發生,但不是很常見。 – bbum 2010-03-13 19:08:27
使用此性能測試項目獲取所有答案:https://github.com/LearnCocos2D/LearnCocos2D/tree/master/Cocos2D-Performance-Test – LearnCocos2D 2012-02-05 21:53:48