Я слышал, что вызов обработчика (делегата и т. Д.) В Objective-C может быть даже быстрее, чем вызов виртуальной функции в C ++. Это действительно правильно? Если так, как это может быть?
AFAIK, виртуальные функции не так медленны для вызова. По крайней мере, я понимаю, что происходит, когда вызывается виртуальная функция:
- Получить указатель на
vtbl
.
- Отмените ссылку на указатель и получите начало массива указателей на функции.
- Смещение (в масштабе указателя) начала массива с индексом метода. Учитывая, что индекс известен во время компиляции, это так же просто, как добавить кратное
uintptr_t
.
- Выполнить инструкцию
call
.
К сожалению, я не знаю Objective-C, поэтому мне сложно сравнивать производительность. Но, по крайней мере, механизм вызова виртуальной функции не выглядит таким медленным, верно? Как может быть быстрее, чем вызов статической функции?