为什么在音频队列播放代码中调用CFRunLoopRunInMode()?

Dan*_* S. 6 playback audioqueueservices cfrunloop ios

我正在关注iOS"音频队列编程指南 - 播放音频".在指南的末尾,可以CFRunLoopRunInMode()在步骤Start和Run a Audio Queue中调用:

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

第6行的文档说:"CFRunLoopRunInMode函数运行包含音频队列线程的运行循环." 但是,当我的方法返回时,是不是执行了运行循环?上面的代码是在我的应用程序中按下播放按钮时由主线程执行的.

现在我很难理解这些调用CFRunLoopRunInMode()有什么好处,因为它们的缺点是我的播放按钮没有正确更新(它看起来整个音频播放的时候按下了)并且没有正面效果,即如果我从我的代码中删除do-while-loop以及调用CFRunLoopRunInMode()而直接从此方法返回,则音频也可以很好地播放.那么这就指出了显而易见的解决方案,只需将这些调用删除,因为这不会产生问题.有人可以解释为什么苹果公司在使用iOS中的音频队列进行音频播放的官方指南中包含此代码吗?

编辑:

我只是在Mac OS X中看到,存在与iOS相同的音频队列API,iOS指南似乎是Mac OS指南的复制粘贴复制品.这让我怀疑那些对运行循环的调用仅在Mac OS中需要而在iOS中不再需要,例如因为否则Mac OS应用程序会退出或类似的东西.有人可以验证这个或排除它吗?

u.g*_*gen 2

@bunnyhero 是对的,CFRunLoopRunInMode()通常用于命令行示例

https://github.com/abbood/Learning-Core-Audio-Book-Code-Sample/blob/master/CH05_Player/CH05_Player/main.c

只要你没有被释放,你就不必在IOS中AudioQueueRef使用...CFRunLoopRunInMode()

我所做的是为音频队列创建一个单独的类,只要我的类指针被AudioQueueRef分配,我就可以播放、暂停、恢复、停止等......