【发布时间】:2022-01-21 18:35:24
【问题描述】:
我有一个 Swift 类,它包含一个 AVAudioEngine 和我的实例,并像这样使用 AVAudioEngineConfigurationChange 通知:
class Demonstration : NSObject {
var engine:AVAudioEngine? = AVAudioEngine()
// ...
override init() {
super.init()
// ...
NotificationCenter.default.addObserver(self,
selector: #selector(self.handleEngineConfigChange(_:)),
name: .AVAudioEngineConfigurationChange,
object: nil)
}
@objc func handleEngineConfigChange(_ notification: Notification) {
// what can I wrap this code with in order to make it not dangerous?
// DispatchQueue.main.sync?
engine = nil
}
}
在docs 中写道:
不要从客户端的通知中取消分配引擎 处理程序。回调发生在内部调度队列上,并且可以 尝试同步关闭引擎时出现死锁。
我什至不知道他们所说的 deallocate 是什么意思——如果它意味着有某种方法,比如 engine.reset() 或 engine.stop()... 或者它是否意味着将引擎设置为 nil...或者它是否只适用于目标 C……我不知道。
无论如何,我只想知道如何设置该方法,以便将来我不必担心破坏。
【问题讨论】:
标签: swift concurrency deadlock avaudioengine