Для чего нужен шаблон «удаление делегата» перед шаблоном «комбинация делегатов»? - PullRequest
0 голосов
/ 05 октября 2019

Во многих примерах кода Unity, где нужно подписаться на обратные вызовы редактора, вы часто встречаете следующий шаблон:

Undo.postprocessModifications -= OnPostprocessModifications;
Undo.postprocessModifications += OnPostprocessModifications;

// then, later, in some other method
Undo.postprocessModifications -= OnPostprocessModifications;

Я обычно делал следующее (внутри EditorWindow):

void OnEnable()
{
    Undo.postprocessModifications += OnPostprocessModifications;
}

void OnDisable()
{
    Undo.postprocessModifications -= OnPostprocessModifications;
}

Вопрос:

Что такое удаление делегата перед шаблоном комбинации делегата для?

Это исключительно для обеспечения дополнительной безопасности илиу него есть другие преимущества?

Ответы [ 2 ]

1 голос
/ 05 октября 2019

Это бесполезно, и, конечно, это не «шаблон», в первую очередь он работает при условии, что у вас есть только один экземпляр делегата, подписанного на это событие, которое, если вы сделаете -=, то ничего, кроме какесли есть как-то подписано 2 экземпляра, то -= все еще оставляет подписку на другой, и после этого вы делаете +=, они возвращаются к 2.

Если что-нибудь, это -=, тогда += помогает с, он говорит вам, что вы теряете трек / контроль над событиями или потоком вашей программы, и эта попытка контролировать его все равно не удалась.

Ваш подход для += при включении и -=при отключении, если поддерживается правильно для всех слушателей, вам никогда не придется использовать этот «шаблон».

0 голосов
/ 05 октября 2019

Я думаю, я нашел, почему они используют такой шаблон:

Unity имеет поведение ON ERROR RESUME NEXT, то есть код продолжается даже после исключения.

Это предотвратит накопление данныхобратные вызовы и, следовательно, испытывают странное поведение кода.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...