所以我正在尝试使用 CoreAudio 方法AUGraphAddRenderNotify(...)
,但我需要引用在通知块中创建此通知的类。因为这是一个 C 函数,所以我不能简单地添加一个[weak self] in
闭包捕获。查看文档,此方法的最后一个参数允许是UnsafeMutableRawPointer
在块执行期间作为第一个参数传入的。按照这个建议,这是我的代码:
let selfPointer = Unmanaged.passUnretained(self).toOpaque()
AUGraphAddRenderNotify(graph, { (audioPlayerPointer, _, _, _, _, _) -> OSStatus in
let audioPlayer = Unmanaged<AudioPlayer>.fromOpaque(audioPlayerPointer).takeUnretainedValue()
...
return noErr
}, selfPointer)
这是我的问题:
我需要弄清楚如何安全地获取该指针背后的值(占零)。更具体地说,我想安全地访问 audioPlayer 并确保在我使用它时它还没有被释放。目前,一切正常,直到 audioPlayer 被释放,然后我的应用程序崩溃。我知道我可以AUGraphRemoveRenderNotify(...)
在对象被释放之前停止通知,但不幸的是这种方法不是我想要的。如何检查指针指向的对象是否已被释放?
提前致谢!