Potrzebuję zapisać sposób, aby powiedzieć: "iOS, chcę, aby ta metoda została wykonana a.s.a.p., ale NIE w tej iteracji pętli uruchomienia.Najpierw w następnym, ale proszę nie w tym." Dziękuję. "Jak wywołać metodę a.s.a.p. ale najwcześniej w kolejnej iteracji pętli?
Teraz jestem zawsze robi to tak:
[self performSelector:@selector(doSomethingInNextRunLoop) withObject:nil afterDelay:0];
[self doSomeOtherThings];
Przy założeniu, że -doSomeOtherThings
zawsze będą wykonywane przed -doSomethingInNextRunLoop
.
Dokumentacja mówi:
Określanie opóźnienie 0 niekoniecznie powodować selektor być wykonywane natychmiast. Selektor nadal znajduje się w kolejce w pętli uruchamiania wątku i wykonuje się tak szybko, jak to możliwe.
Więc w zasadzie może się zdarzyć, że metoda jest wywoływana natychmiast, jak gdybym właśnie wysłał wiadomość bezpośrednią, powodując -doSomethingInNextRunLoop
być wykonywane przed -doSomeOtherThings
?
Jak mogę się całkowicie upewnić, że będzie to nazywane a.s.a.p. ale NIGDY nigdy w tej samej pętli iteracji run?
Aby wyjaśnić sformułowanie: Z pętli uruchamiania mam na myśli główny wątek i iterację, w której muszą wrócić wszystkie metody, aż wątek będzie gotowy na nowe zdarzenia.
Znakomity! Kategoria, która to ułatwi, miałaby sens. – openfrog