ios – 使用导致内存泄漏的音频片段

ios – 使用导致内存泄漏的音频片段,第1张

概述我有一个sprite-kit游戏场景(SKScene),它不时使用音频剪辑.我不想在每次需要运行短音频剪辑时创建新动作(SKAction),因为声音可能会断断续续.因此,我使用文件名初始化一个 *** 作变量,并在必要时准备好使用它. class GameScene: SKScene { let audioMatchAction = SKAction.playSoundFileNamed("myA 我有一个sprite-kit游戏场景(SKScene),它不时使用音频剪辑.我不想在每次需要运行短音频剪辑时创建新动作(SKAction),因为声音可能会断断续续.因此,我使用文件名初始化一个 *** 作变量,并在必要时准备好使用它.

class GameScene: SKScene {    let audioMatchAction = SKAction.playSoundfilenamed("myAudio",waitForCompletion: false)}

然后,当我需要运行此音频剪辑时,我只使用以下代码行.

self.run(audioMatchAction)

考虑到所有情况,有一些迹象表明,当视图控制器(UIVIEwController)设置场景时,内存可能会泄漏.所以我使用Allocations看看发生了什么.它说有两个泄漏指向AudioToolBox库.无论如何,我已将上面的行改为以下内容.

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.我还有两次泄漏.如果我完全停止调用音频片段,Allocations将不会报告泄漏,这告诉我使用这些片段会导致泄漏.那么我该怎么做才能阻止音频片段泄漏内存?谢谢.

UPDATE

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

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 {        }    }}

解决方法 为了将来参考,将audioURLMatchPlayer声明为类型而不是实例化播放器将防止内存泄漏.

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

总结

以上是内存溢出为你收集整理的ios – 使用导致内存泄漏的音频片段全部内容,希望文章能够帮你解决ios – 使用导致内存泄漏的音频片段所遇到的程序开发问题。

如果觉得内存溢出网站内容还不错,欢迎将内存溢出网站推荐给程序员好友。

欢迎分享,转载请注明来源:内存溢出

原文地址: https://outofmemory.cn/web/1002257.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2022-05-22
下一篇 2022-05-22

发表评论

登录后才能评论

评论列表(0条)

保存