CoreAudio メソッドを使用しようとしていAUGraphAddRenderNotify(...)
ますが、通知ブロック内でこの通知を作成したクラスへの参照が必要です。これは C 関数であるため、単純に[weak self] in
クロージャ キャプチャを追加することはできません。Documentationを見ると、このメソッドの最後のパラメーターはUnsafeMutableRawPointer
、ブロックの実行中に最初のパラメーターとして渡されることが許可されています。この提案に従って、私が持っているコードは次のとおりです。
let selfPointer = Unmanaged.passUnretained(self).toOpaque()
AUGraphAddRenderNotify(graph, { (audioPlayerPointer, _, _, _, _, _) -> OSStatus in
let audioPlayer = Unmanaged<AudioPlayer>.fromOpaque(audioPlayerPointer).takeUnretainedValue()
...
return noErr
}, selfPointer)
これが私の質問です
。このポインターの背後にある値を安全に取得する方法を理解する必要があります (nil を考慮して)。より具体的には、audioPlayer に安全にアクセスし、使用するまでに割り当てが解除されていないことを確認したいと考えています。現在、audioPlayer の割り当てが解除され、アプリがクラッシュするまで、すべてが正常に機能します。オブジェクトの割り当てが解除される前に通知を停止するために使用できることはわかっていAUGraphRemoveRenderNotify(...)
ますが、残念ながら、この方法は私が探しているものではありません。ポインターが指しているオブジェクトが既に割り当て解除されているかどうかを確認するにはどうすればよいですか?
前もって感謝します!