私は現在 AudioQueue サービスで遊んでいますが、小さな問題があります。
AudioQueue には一連のコールバックがあり、それぞれが基本的にポインタである「ユーザー データ」を運ぶことができます。オブジェクトの 1 つをこのポインターとして渡すことができればいいのにと思います。
したがって、場合によっては、AudioQueue がこれに近い方法でコールバックを呼び出しています。
static void HandleOutputBuffer (
void *aqData,
AudioQueueRef inAQ,
AudioQueueBufferRef inBuffer
) {
MyPlayerData *mpd = (MyPlayerData *)aqData;
...
}
これは通常はうまく機能しますが、プレーヤーがメディアの最後に到達すると割り当てが解除されます。しかし、多くの場合HandleOutputBuffer
、オブジェクトの割り当てが解除された後にコールバックが呼び出されるMyPlayerData
ため、セグメンテーション違反が発生します。
これに弱い参照を使用できればいいのにと思います。void *
ARCポインターを取得する方法はありますか? オブジェクトの割り当てが解除されるたびに nil に設定されるものはありますか?
現在 を検討してい__weak
ますが、これが適切なツールかどうかはわかりません...