Каково значение WaitUntilDOne в executeSelectorOnMainThread? - PullRequest
8 голосов
/ 20 января 2012

Какое значение WaitUntilDOne в performSelectorOnMainThread?

Каким образом YES или NO, установленный на WaitUntilDone, может иметь в приложении?

ОБНОВЛЕНИЕ:

Мой вопрос должен был быть таким: в каких сценариях они имеют значение?

Ответ Серхио был тем, который я ожидал.1016 *

Ответы [ 4 ]

12 голосов
/ 20 января 2012

С Apple документы о waitUntilDone:

Логическое значение, указывающее, блокируется ли текущий поток до тех пор, пока указанный приемник не будет выполнен на приемнике в основном потоке. Укажите ДА, чтобы заблокировать эту тему; в противном случае укажите NO, чтобы этот метод возвращался немедленно. Если текущий поток также является основным, и вы указываете ДА для этого параметра, сообщение доставляется и обрабатывается немедленно.

Вы должны сосредоточиться на том, какой поток выполняет performSelectorOnMainThread. Этот поток будет блокироваться и ждать, пока основной поток не завершит этот селектор; скажем, например, что рабочий поток должен отправить сообщение в основной поток (например, чтобы сохранить некоторую информацию в каком-то центральном хранилище, которое не является поточно-ориентированным). Рабочий может захотеть заблокировать и дождаться завершения операции, прежде чем выполнить другую операцию того же рода. Итак, waitUntilDone пригодится в таком случае.

9 голосов
/ 20 января 2012

Если вы говорите NO, performSelectorOnMainThread не блокируется и выполнит следующую строку кода после performSelectorOnMainThread немедленно, не дожидаясь, пока основной поток выполнит ваш селектор.

Если вы скажете YES, поток, из которого вы вызвали performSelectorOnMainThread, будет блокировать выполнение в этой строке до тех пор, пока основной поток не выполнит ваш селектор, тогда он продолжит.

1 голос
/ 20 января 2012

Как правило, вы хотите избежать блокировки текущего потока, используя YES.

Если NO, сообщение будет добавлено в список циклов выполнения основного потока, который будет выполнен после возобновления цикла выполнения - это может произойти вскоре и практически сразу / одновременно.

1 голос
/ 20 января 2012

YES означает, что текущий поток блокируется / ждет, пока селектор не будет выполнен, NO, чтобы иметь performSelectorOnMainThread:withObject:waitUntilDone:, возвращает немедленно

...