我目前正在使用 AudioQueue 服务,但有一个小问题。
AudioQueue 有一堆回调,每个回调可以携带一个“用户数据”,基本上是一个指针。我希望我可以将我的一个对象作为这个指针传递。
所以发生的事情是,在某些情况下,AudioQueue 以接近此的方式调用我的回调:
static void HandleOutputBuffer (
void *aqData,
AudioQueueRef inAQ,
AudioQueueBufferRef inBuffer
) {
MyPlayerData *mpd = (MyPlayerData *)aqData;
...
}
这通常效果很好,但是当我的播放器到达媒体末尾时,它会被释放。但通常HandleOutputBuffer
在对象被释放后调用回调MyPlayerData
,导致一个很好的段错误。
我希望我可以为此使用弱参考。有什么办法可以让我拥有一个 ARCvoid *
指针?每当对象被释放时会被设置为 nil 的东西?
我目前正在查看__weak
,但我不确定这是使用正确的工具...