【问题标题】:Swift iOS Sound Memory Leak?Swift iOS 声音内存泄漏?
【发布时间】:2016-03-02 07:46:19
【问题描述】:

对我的应用程序进行错误测试,并在播放声音文件(任何声音文件)时发现一些有趣的东西。我注意到较小的声音文件会增加大约 0.01 mb 的内存并且之后不会释放内存,而较长的声音文件在播放后会增加大约 1.8 - 2.0 mb。

我使用仪器泄漏检查来测试应用程序,看看到底发生了什么,我发现它确实是音频文件。

我通常使用 SKAction.playSoundFileNamed() 播放我的音频文件。不知道有没有关系。

let gameOver = SKAction.playSoundFileNamed("gameOver.wav", waitForCompletion: false)
sprite.runAction(gameOver)

不确定这是我自己的问题还是已知问题。或者它甚至是一个问题?只是好奇。

Screenshot

【问题讨论】:

  • 你能发布一些关于你如何创建和播放声音的代码吗?
  • 是的,我会用一些代码更新帖子。
  • 仍然没有找到解决方案。如果有人知道,我很想知道为什么。
  • 这是 iOS 中的一个错误,其他开发人员在 Stackoverflow 上发表了评论。我仍在研究解决方法。

标签: ios swift performance memory-leaks


【解决方案1】:

几个月前我遇到了这个问题,所以我尝试了AudioToolbox 框架作为替代方案,它也能正常工作,没有内存泄漏。

我想在游戏中使用一些音效,所以我创建了一个类似下面的函数,它在 sfx 数组中设置所有 systemSoundID

var sfx = [SystemSoundID]()


func createSfx() {

    var i = 0

    while i < 8 {

        var fileName = ""

        switch i {

        case 0:
           fileName = "coinCollected"

        case 1:
            fileName = "laserGun"

        case 2:
            fileName = "laserBeamShutOff"

        case 3:
            fileName = "powerDown"

        case 4:
            fileName = "shipMovement"

        case 5:
            fileName = "openBlockade"

        case 6:
            fileName = "invisibilityOn"

        case 7:
            fileName = "outOfFuel"

        default:
            print("Error creating sfx")

        }

        sfx.append(SystemSoundID())

        let filePath = NSBundle.mainBundle().pathForResource(fileName, ofType: "wav")
        let soundURL = NSURL(fileURLWithPath: filePath!)
        AudioServicesCreateSystemSoundID(soundURL, &sfx[i])

        i += 1

    }

}

然后您可以使用AudioServicesPlaySystemSound 播放音效,音效的数组索引如下:

AudioServicesPlaySystemSound(sfx[1]) // Plays laserGun sound effect

另外,您知道,我在使用它时发现了一个问题。如果您使用AVAudioPlayer 播放背景音乐,声音效果的音量不会超过设备的中点。我不确定为什么会发生这种情况,但我浪费了很多时间来寻找声音效果的替代方案,这是最好的选择,尽管有轻微的音量问题。

希望这可以帮助一些正在寻找 SKAction 的良好替代方案的人。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2020-03-19
    • 1970-01-01
    • 2012-02-18
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多