我正在使用 The Amazing Audio Engine 来处理 iOS 应用程序中的同步播放。
该框架要求您使用 C 函数作为在音频线程上调用的回调 (playbackTimingReceiver)。然后,您需要使用向其传递处理程序 (pageTurnHandler) 的 C 函数 (AEAudioControllerSendAsynchronousMessageToMainThread) 再次向主线程发送消息。
我在使用 C 时并没有过多的经验,但据我所知,我在消息中传递了一个需要取消引用的指针。
我可以通过以下方式成功实现:
PlaybackManager* receiver = *((PlaybackManager**)userInfo);
但只有当我在项目目标的已编译源中使用 -fno-objc-arc 标志为该文件关闭项目中的 ARC 时。
对于我的问题,是否可以在开启 ARC 的情况下实现这一点?如果是这样,正确的语法是什么?
相关代码段:
#pragma mark - Audio Timing Callback
-(AEAudioControllerTimingCallback)timingReceiverCallback
{
return playbackTimingReceiver;
}
static void playbackTimingReceiver(PlaybackManager* receiver,
AEAudioController *audioController,
const AudioTimeStamp *time,
UInt32 const frames,
AEAudioTimingContext context)
{
receiver->_hostTime = getUptimeInMilliseconds(time->mHostTime);
AEAudioControllerSendAsynchronousMessageToMainThread(audioController,
pageTurnHandler,
&audioController,
sizeof(id));
}
static void pageTurnHandler(AEAudioController *audioController, void *userInfo, int userInfoLength)
{
PlaybackManager* receiver = *((PlaybackManager**)userInfo);
NSLog(@"Receiver:%@", receiver);
}