Ilekroć próbuję pobrać duży związany z pliku UIScrollView
, MPMapView
lub coś, proces pobierania zostanie zatrzymany, gdy tylko dotknąć ekranu iPhone. Na szczęście niesamowity post na blogu Jörna sugeruje alternatywną opcję, użycie NSRunLoopCommonModes
do połączenia.
To pozwala mi przyjrzeć się szczegółom dwóch trybów, NSDefaultRunLoopMode i NSRunLoopCommonModes, ale dokument Apple nie wyjaśnia uprzejmie, poza tym, że mówi
NSDefaultRunLoopMode
Tryb obsługi źródeł wejściowych innych niż obiekty NSConnection. Jest to najczęściej używany tryb pętli uruchamiania.
NSRunLoopCommonModes
Obiekty dodane do pętli uruchamiania przy użyciu tej wartości jako trybu są monitorowane przez wszystkie tryby pętli uruchamiania, które zostały zadeklarowane jako elementy zestawu „wspólnych” trybów; szczegółowe informacje można znaleźć w opisie CFRunLoopAddCommonMode.
CFRunLoopAddCommonMode
Źródła, liczniki czasu i obserwatory są rejestrowane w jednym lub kilku trybach pętli uruchamiania i działają tylko wtedy, gdy pętla uruchamiania działa w jednym z tych trybów. Typowe tryby to zestaw trybów pracy w pętli, dla których można zdefiniować zestaw źródeł, timerów i obserwatorów, które są wspólne dla tych trybów. Zamiast rejestrować źródło, na przykład w każdym określonym trybie pętli uruchamiania, możesz zarejestrować je jeden raz we wspólnym pseudo-trybie pętli uruchamiania, a zostanie ono automatycznie zarejestrowane w każdym trybie pętli uruchamiania w trybie wspólnym. Podobnie, gdy tryb jest dodawany do zestawu wspólnych trybów, wszelkie źródła, liczniki czasu lub obserwatory już zarejestrowane we wspólnym pseudo-trybie są dodawane do nowo dodanego wspólnego trybu.
Czy ktoś mógłby wyjaśnić te dwie kwestie w ludzkim języku?
źródło
NSRunLoopCommonModes
zezwala na zdarzenie timera podczas przewijaniaUIScrollView
.NSDefaultRunLoopMode
zapobiegaj licznikowi czasu podczas przewijania.