Конечно, ответ от Anomie бьет по голове, я просто указываю, что в некоторых случаях перестановка кода может решить проблему. Немного похоже на блок писателей, иногда разработчики зацикливаются на решении проблемы особым образом, когда на самом деле существует боковой план B. FWIW Мне неизвестен ЛЮБОЙ случай, когда стандартный executeSelector: withObject: afterDelay: 0 приводит к часто блокируйте и используйте технику для оптимизации кода пользовательского интерфейса, написанного другими.

ужен способ сохранения, чтобы сказать: «iOS, я хочу, чтобы этот метод был выполнен a.s.a.p., но НЕ в ЭТОЙ итерации цикла выполнения. В ближайшее время в следующем, но, пожалуйста, не в этом. Спасибо».

Прямо сейчас я всегда делаю это так:

[self performSelector:@selector(doSomethingInNextRunLoop) withObject:nil afterDelay:0];
[self doSomeOtherThings];

С предположением, что-doSomeOtherThings всегда будет выполняться ДО-doSomethingInNextRunLoop.

В документации сказано:

Задание задержки 0 не обязательно приводит к немедленному выполнению селектора. Селектор все еще находится в очереди в цикле выполнения потока и выполняется как можно скорее.

Так что в принципе может случиться так, что метод вызывается немедленно, как если бы я только что отправил прямое сообщение, вызывая-doSomethingInNextRunLoop быть выполненным до-doSomeOtherThings?

Как я могу быть абсолютно уверен, что он будет называться a.s.a.p. но НИКОГДА никогда в такой же итерации цикла выполнения?

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

Ответы на вопрос(4)

Ваш ответ на вопрос