Я хочу иметь возможность выполнить block
на следующей итерации цикла запуска. Это не так важно, будет ли он выполняться в начале или в конце следующего цикла цикла, только это выполнение отложено до завершения всего кода в текущем цикле выполнения.
Я знаю, что следующее не работает, потому что оно чередуется с основным циклом запуска, поэтому мой код может выполняться в следующем цикле выполнения, но это может и не быть.
dispatch_async(dispatch_get_main_queue(),^{
//my code
});
Следующее, что я считаю, испытывает ту же проблему, что и выше:
dispatch_after(DISPATCH_TIME_NOW, dispatch_get_main_queue(), ^(void){
//my code
});
Теперь я считаю, что следующее будет работать, поскольку оно помещается в конец текущего цикла цикла (исправьте меня, если я ошибаюсь), будет ли это действительно работать?
[self performSelector:@selector(myMethod) withObject:nil afterDelay:0];
Как насчет таймера с интервалом 0
? В документации указано: If seconds is less than or equal to 0.0, this method chooses the nonnegative value of 0.1 milliseconds instead.
Выполняется ли это для обеспечения выполнения на следующей итерации цикла запуска?
[NSTimer scheduledTimerWithTimeInterval:0 target:self selector:@selector(myMethod) userInfo:nil repeats:NO];
Что все параметры, о которых я могу думать, но я все еще не ближе к выполнению блока (в отличие от вызова метода) на следующей итерации цикла запуска с гарантией, что он не будет раньше.