You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

AVAudioNode创建后立即释放,无法附加到AVAudioEngine求助

问题分析与解决办法
  • AVAudioNode是抽象基类,不能直接实例化,你直接创建AVAudioNode()实例会导致对象处于非法未初始化状态,这就是为什么它会被立即释放、调用print或attach时崩溃,控制台po AVAudioNode()返回<uninitialized>的原因。
  • 而AVAudioMixerNode()能正常工作,是因为它是AVAudioNode的合法具体子类,苹果设计这类节点时只允许通过子类创建实例。
  • 修复代码很简单,把直接实例化AVAudioNode的代码替换成你需要的具体子类(比如混音节点、播放器节点、效果器节点等),示例如下:
class MyClass {
    // 替换为具体的AVAudioNode子类,这里以AVAudioMixerNode为例
    let node = AVAudioMixerNode()
    let engine = AVAudioEngine()
    
    func foo() {
        print(node) // 不再崩溃
        engine.attach(node) // 正常执行
    }
}
  • 注意:根据你的实际业务需求选择对应的子类,比如播放音频用AVAudioPlayerNode,添加音效用AVAudioUnitEffect的子类,混音用AVAudioMixerNode等,所有可用的音频节点都是AVAudioNode的子类,不要直接使用基类。

内容的提问来源于stack exchange,提问作者Kakhi Kiknadze

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.24 02:22:05