我正在使用The Amazing Audio Engine來處理在iOS應用程序中同步的回放。在iOS中使用C函數中的ARC取消引用指針
該框架要求您使用C函數作爲在音頻線程上調用的回調函數(playbackTimingReceiver)。然後您需要使用傳遞處理程序(pageTurnHandler)的C函數(AEAudioControllerSendAsynchronousMessageToMainThread)再次向主線程發送消息。
我沒有過多的C語言工作經驗,但據我所知,我在需要解除引用的消息中傳遞一個指針。
,我可以用線順利實現:
PlaybackManager* receiver = *((PlaybackManager**)userInfo);
但是,只有當我把ARC關閉該項目使用了-fno-objc弧標誌的項目目標編譯源該文件。
對我的問題,是否有可能實現這與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);
}
如何解引用void指針? –
它不是取消引用無效指針,而是取消引用指針指針。 'void **' –
謝謝你...停止了編譯器的抱怨,但是在運行時我得到了錯誤的訪問:線程1:EXE_BAD_ACCESS(code = 1,address = 0x30000008) – Brendt