Оставляет ли нажатие кнопки внутри функции что-то в стеке? - PullRequest
0 голосов
/ 21 ноября 2018

Пользователь играет в игру против компьютера.После того, как пользователь что-то сделает (например, в процедуре нажатия кнопки, называемой User Plays ), активируется кнопка с именем Computer Play .Когда пользователь нажимает его, компьютер воспроизводит, а затем включает user play .Все подпрограммы по существу завершаются и ждут ввода пользователя.

Если вместо этого я автоматически нажму кнопку Computer Play из нижней части подпрограммы user Play , я будуоставить что-нибудь в стеке?Буду ли я создавать огромную серию вложенных функций и в конечном итоге не хватит места в стеке?

Ответы [ 2 ]

0 голосов
/ 21 ноября 2018

Каждый раз, когда вы работаете с рекурсией, есть небольшая вероятность, что что-то может пойти не так.На ваш вопрос можно ответить по-разному в зависимости от того, как ваш код выполняется на практике.

Используете ли вы экранирующие обратные вызовы или просто вызываете свои методы друг из друга и так далее.Пожалуйста, предоставьте некоторый код или хотя бы псевдо версию.Общий ответ для этого будет - да .У вас есть риск исчерпать пространство стека, если ваш рекурсивный вызов потенциально бесконечен.

0 голосов
/ 21 ноября 2018

Нет.Методы кнопки IBAction - это методы, аналогичные любым другим.Им звонят, они исполняют свой код и возвращаются.Их локальные переменные распределяются в стеке, а затем извлекаются из стека при возврате функции.

Если в методе IBAction возникают утечки памяти, они произойдут независимо от того, вызывается ли этот метод нажатием кнопки или издругой метод.

Если у вас нет утечек памяти, вызов метода IBAction кнопки из другого метода не приведет к утечке памяти.

РЕДАКТИРОВАТЬ:

Обратите внимание, чтоесли у вас бесконечно рекурсивный код (где метод вызывает себя несколько раз, или метод A вызывает метод B, который вызывает метод A, который вызывает метод B и т. д.), вы можете бесконечно выделять все больше и больше стековой памяти, пока не получите переполнение стека и сбой вашей программы.Тем не менее, вы узнаете об этом довольно быстро.Ваше приложение будет зависать на несколько секунд, а затем падать каждый раз, когда вы переходите к бесконечной рекурсии.

...