2013-01-08 35 views
6

Podążam za przewodnikiem po systemie iOS "Programowanie kolejki audio - Odtwarzanie dźwięku". Pod koniec prowadnicy, nie wzywa do CFRunLoopRunInMode() w kroku Start and Run an Audio Queue:Dlaczego wywołać funkcję CFRunLoopRunInMode() w kodzie odtwarzania kolejki audio?

do {            // 5 
    CFRunLoopRunInMode (       // 6 
     kCFRunLoopDefaultMode,      // 7 
     0.25,          // 8 
     false          // 9 
    ); 
} while (aqData.mIsRunning); 
//... 

Dokumentacja o linii 6 mówi: „Funkcja CFRunLoopRunInMode uruchamia pętlę run, który zawiera wątek kolejki dźwiękowej” Ale czy ta pętla uruchamiania nie zostanie wykonana mimo to, gdy moja metoda powróci? Powyższy kod jest wykonywany przez główny wątek po naciśnięciu przycisku odtwarzania w mojej aplikacji.

Teraz trudno mi zrozumieć, do czego służą te połączenia z CFRunLoopRunInMode(), ponieważ mają one wadę polegającą na tym, że mój przycisk odtwarzania nie jest poprawnie aktualizowany (wygląda na wciśnięty przez cały czas odtwarzania dźwięku) i nie ma żadnego pozytywnego efektu, tzn. audio ładnie gra, jeśli usunę pętlę do-while z mojego kodu wraz z wywołaniami do CFRunLoopRunInMode() i zamiast tego bezpośrednio powrócę z tej metody. To wskazuje na oczywiste rozwiązanie, aby po prostu usunąć te połączenia, ponieważ nie stanowi to problemu. Czy ktoś może wyjaśnić, dlaczego ten kod znajduje się w oficjalnym przewodniku firmy Apple dotyczącym korzystania z aplikacji Audio Queues w systemie iOS do odtwarzania dźwięku?

Edit:

ja tylko widząc, że w systemie Mac OS X, istnieje tego samego dźwięku kolejek API jak na iOS i przewodnik dla iOS wydaje się być copy-paste powielanie Mac OS guide. To prowadzi mnie do podejrzeń, że te połączenia z pętlą uruchamiania są wymagane tylko w systemie Mac OS, a nie w systemie iOS, np. ponieważ w przeciwnym razie aplikacja systemu Mac OS zakończy działanie lub coś podobnego. Czy ktoś może to zweryfikować lub wykluczyć?

+2

Myślę, że masz rację: dla mnie to wygląda jak przykładowy kod dla samodzielnej (wiersza poleceń?) Aplikacji, która robi * nic innego * ale odtwarza plik audio do końca. W "prawdziwej" aplikacji nie trzeba uruchamiać pętli "ręcznie". FWIW, używam AudioQueues i nigdy nie zauważyłem tego przykładowego kodu i nigdy nie wołam 'CFRunLoopRunInMode()' w takiej pętli. – bunnyhero

Odpowiedz