我正在关注 iOS“音频队列编程指南 - 播放音频”。在指南的结尾处,在Start and Run an Audio QueueCFRunLoopRunInMode()
步骤中有调用:
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 中,存在与 iOS 上相同的音频队列 API,并且 iOS 指南似乎是Mac OS 指南的复制粘贴副本。这使我怀疑这些对运行循环的调用仅在 Mac OS 中需要,而在 iOS 中不再需要,例如因为否则 Mac OS 应用程序将退出或类似的东西。有人可以验证或排除吗?