Handler invocation speed: Objective-C vs virtual functions
- by Kerido
I heard that calling a handler (delegate, etc.) in Objective-C can be even faster than calling a virtual function in C++. Is it really correct? If so, how can that be?
AFAIK, virtual functions are not that slow to call. At least, this is my understanding of what happens when a virtual function is called:
Compute the index of the function pointer location in vtbl.
Obtain the pointer to vtbl.
Dereference the pointer and obtain the beginning of the array of function pointers.
Offset (in pointer scale) the beginning of the array with the index value obtained on step 1.
Issue a call instruction.
Unfortunately, I don't know Objective-C so it's hard for me to compare performance. But at least, the mechanism of a virtual function call doesn't look that slow, right? How can something other than static function call be faster?