我正在關注iOS「音頻隊列編程指南 - 播放音頻」。近引導結束時,有在步驟Start and Run an Audio Queue調用CFRunLoopRunInMode()
:爲什麼在音頻隊列播放代碼中調用CFRunLoopRunInMode()?
do { // 5
CFRunLoopRunInMode ( // 6
kCFRunLoopDefaultMode, // 7
0.25, // 8
false // 9
);
} while (aqData.mIsRunning);
//...
約6行的文件說:「在CFRunLoopRunInMode功能運行運行循環包含音頻隊列中的線程」 但是,當我的方法返回時,是不是運行循環呢?上面的代碼由主線程在我的應用中按下播放按鈕後執行。
現在我很難理解這些對CFRunLoopRunInMode()
的調用有什麼好處,因爲它們的缺點是我的播放按鈕沒有正確更新(在音頻播放的整個過程中它看起來都是按下的)並且沒有正面影響,即音頻也可以很好地播放,如果我從我的代碼中刪除do-while-loop並調用CFRunLoopRunInMode()
,而直接從此方法返回。 那麼這點指向明顯的解決方案,只是保持這些調用刪除,因爲這不會產生問題。有人可以解釋爲什麼此代碼包含在Apple的官方指南中,包括使用iOS中的音頻隊列進行音頻播放?
編輯:
我只是看到,在Mac OS X中,存在相同的音頻隊列API爲iOS設備和iOS專用的導似乎是Mac OS guide的複製粘貼複製。這導致我懷疑這些對運行循環的調用只在Mac OS中需要,而在iOS中不再需要,例如,因爲否則Mac OS應用程序將退出或類似的東西。有人可以驗證這一點或排除?
我認爲你是正確的:對我來說,這看起來像一個獨立的(命令行?)應用程序的示例代碼,它不會執行任何其他操作,但可以播放音頻文件來完成。在「真實」應用程序中,不需要手動運行運行循環。 FWIW,我使用AudioQueues並從未注意到示例代碼,並且從不在類似的循環中調用'CFRunLoopRunInMode()'。 – bunnyhero