首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >使用音频剪辑导致内存泄漏

使用音频剪辑导致内存泄漏
EN

Stack Overflow用户
提问于 2017-05-07 01:33:07
回答 1查看 340关注 0票数 4

我有一个雪碧-工具包游戏场景(SKScene),使用音频剪辑不时.我不想创建一个新的动作(SKAction),每次我需要运行一个简短的音频剪辑,因为声音可能口吃。因此,我用文件名初始化了一个操作变量,并准备在必要时使用它。

代码语言:javascript
复制
class GameScene: SKScene {
    let audioMatchAction = SKAction.playSoundFileNamed("myAudio", waitForCompletion: false)
}

然后,当我需要运行这个音频剪辑时,我只使用下面的代码行。

代码语言:javascript
复制
self.run(audioMatchAction)

考虑到所有情况,有迹象表明当视图控制器(UIViewController)设置场景时,内存可能会泄漏。因此,我使用了分配来查看发生了什么。它说有两个指向AudioToolbox库的漏洞。不管怎么说,我已经把上面的线改成了下面的一行。

代码语言:javascript
复制
let waitAction = SKAction.wait(forDuration: 1.0)
self.run(audioMatchAction, withKey: "audio")
self.run(waitAction, completion: {
    self.removeAction(forKey: "audio")
})

分配仍然说,当应用程序转换到游戏视图控制器时,有两个漏洞。我读过几十个关于SKAction和音频剪辑的主题。有些主题建议我们使用SKAudioNode而不是SKAction.playSoundFileNamed。我试过了。泄漏仍然存在。我甚至用过AVAudioPlayer。我还有两个漏洞。如果我完全停止调用音频剪辑,分配将不会报告泄漏,这告诉我,使用这些剪辑是造成泄漏。那么,我能做些什么来阻止音频剪辑泄漏内存呢?谢谢。

更新

我想我昨天使用了AVAudioPlayer的以下代码行来查看泄漏是否会消失。

代码语言:javascript
复制
class GameScene: SKScene {
    let audioURLMatch = URL(fileURLWithPath: Bundle.main.path(forResource: "myAudio", ofType: "caf")!) as NSURL
    var audioURLMatchPlayer = AVAudioPlayer()
    override func didMove(to view: SKView) {
        // audio //
        do {
            audioURLMatchPlayer = try AVAudioPlayer(contentsOf: audioURLMatch as URL)
            audioURLMatchPlayer.prepareToPlay()
        } catch let error {

        }
    }
}

EN

回答 1

Stack Overflow用户

发布于 2017-12-28 22:48:08

作为将来的参考,将audioURLMatchPlayer声明为类型而不是实例化播放器将防止内存泄漏。

使用var audioURLMatchPlayer: AVAudioPlayer?而不是var audioURLMatchPlayer = AVAudioPlayer()

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/43826992

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档