Swift iOS声音内存泄漏?

时间:2016-03-02 07:46:20

标签: ios swift performance memory-leaks

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

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

我通常使用SKAction.playSoundFileNamed()播放我的音频文件。不确定这与它有什么关系。

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

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

Screenshot

1 个答案:

答案 0 :(得分:0)

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

我有一些想要用于游戏的声音效果,所以我创建了一个像bellow这样的函数来设置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替代品的人。