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应用程序会退出或类似的东西.有人可以验证这个或排除它吗?
@bunnyhero 是对的,CFRunLoopRunInMode()通常用于命令行示例
只要你没有被释放,你就不必在IOS中AudioQueueRef使用...CFRunLoopRunInMode()
我所做的是为音频队列创建一个单独的类,只要我的类指针被AudioQueueRef分配,我就可以播放、暂停、恢复、停止等......
| 归档时间: |
|
| 查看次数: |
2849 次 |
| 最近记录: |