Имам нужда от начин за запазване, за да кажа: "iOS, искам този метод да се изпълни a.s.a.p., но НЕ в ТАЗИ итерация на цикъл на изпълнение. Най-рано в следващата, но моля не в тази. Благодаря."
В момента винаги го правя така:
[self performSelector:@selector(doSomethingInNextRunLoop) withObject:nil afterDelay:0];
[self doSomeOtherThings];
С предположението, че -doSomeOtherThings
винаги ще се изпълнява ПРЕДИ -doSomethingInNextRunLoop
.
В документацията се казва:
Задаването на забавяне от 0 не води непременно до незабавно изпълнение на селектора. Селекторът все още е на опашка в цикъла за изпълнение на нишката и се изпълнява възможно най-скоро.
Така че по принцип може да се случи методът да бъде извикан незабавно, сякаш току-що съм изпратил директно съобщение, причинявайки -doSomethingInNextRunLoop
да се изпълни преди -doSomeOtherThings
?
Как мога да съм абсолютно сигурен, че ще се казва a.s.a.p. но НИКОГА в същата тази итерация на цикъл на изпълнение?
За да изясня формулировката: С run loop имам предвид основната нишка и итерацията, в която всички методи трябва да се върнат, докато нишката отново е готова за нови събития.