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:
- Obtain the pointer to
vtbl
. - De-reference the pointer and obtain the beginning of the array of function pointers.
- Offset (in pointer scale) the beginning of the array with the index of the method. Considering that the index is known at compile time, it's as easy as adding a multiple of
uintptr_t
. - 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?