Существует ли различие между делегатом/селектором и целью/действием?

Стоимость вызова функции связана с набором операций, необходимых для перехода из данной области в другую, то есть из текущего выполнения в область другой функции. Рассмотрим следующий код:

void foo(int w) { int x, y, z; ...; }
int main() { int a, b, c; ...; foo(b); ...; }

Выполнение начинается в main(), и вы можете загрузить некоторые переменные в регистры / память. Когда вы достигнете foo(), набор переменных, доступных для использования, будет другим: значения a, b, c недоступны , недоступны функцией foo(), и, если вы исчерпаете доступные регистры, сохраненные значения будут должны быть пролиты на память.

Проблема с регистрами появляется на любом языке. Но некоторые языки нуждаются в более сложных операциях, чтобы перейти из области в область: C ++ просто помещает все, что требуется от функции, в стек памяти, поддерживая указатели для окружающих областей (в этом случае, запустив foo(), вы сможете чтобы достичь определения w в области действия main().

Другие языки должны распределять и передавать сложные данные, чтобы обеспечить доступ к окружающим переменным области действия. Эти дополнительные распределения и даже поиск определенных меток в пределах окружающие области видимости могут значительно повысить стоимость вызовов функций.

7
задан Collin Allen 14 June 2009 в 04:45
поделиться

1 ответ

Делегаты обычно реализуются с использованием протоколов вместо селекторов. Это более формальный способ взаимодействия между классами, который в основном полезен, когда может потребоваться более одного метода.

Цель / действие обычно используются для соответствия «событийной» ситуации, такой как щелчок, срабатывание таймера и т. д.

13
ответ дан 6 December 2019 в 11:52
поделиться