Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/cplusplus/157.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Swift iOS声音内存泄漏?_Ios_Swift_Performance_Memory Leaks - Fatal编程技术网

Swift iOS声音内存泄漏?

Swift iOS声音内存泄漏?,ios,swift,performance,memory-leaks,Ios,Swift,Performance,Memory Leaks,我正在测试我的应用程序,每当播放声音文件(任何声音文件)时,我都会注意到一些有趣的事情。我注意到较小的声音文件会增加大约0.01MB的内存,播放后不会释放内存,较长的声音文件在播放后会增加大约1.8-2.0MB的内存 我使用仪器泄漏检查来测试应用程序,看看到底发生了什么,我收集到的确实是音频文件 我通常使用SKAction.PlaySoundFileName()播放音频文件。不确定这是否与此有关 let gameOver = SKAction.playSoundFileNamed("gameOv

我正在测试我的应用程序,每当播放声音文件(任何声音文件)时,我都会注意到一些有趣的事情。我注意到较小的声音文件会增加大约0.01MB的内存,播放后不会释放内存,较长的声音文件在播放后会增加大约1.8-2.0MB的内存

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

我通常使用SKAction.PlaySoundFileName()播放音频文件。不确定这是否与此有关

let gameOver = SKAction.playSoundFileNamed("gameOver.wav", waitForCompletion: false)
sprite.runAction(gameOver)
我不确定这是我的问题还是一个已知的问题。或者这甚至是一个问题?只是好奇而已


几个月前我遇到了这个问题,所以我尝试了
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

    }

}
另外,正如你所知,我在使用这个时发现了一个问题。如果您使用
AVAudioPlayer
播放背景音乐,则音效的音量不会超过设备上的中点。我不知道为什么会发生这种情况,但我浪费了很多时间试图找到一个替代的声音效果,这是最好的选择,尽管轻微的音量问题


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

几个月前,我遇到了这个问题,所以我尝试了
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

    }

}
另外,正如你所知,我在使用这个时发现了一个问题。如果您使用
AVAudioPlayer
播放背景音乐,则音效的音量不会超过设备上的中点。我不知道为什么会发生这种情况,但我浪费了很多时间试图找到一个替代的声音效果,这是最好的选择,尽管轻微的音量问题


希望这能帮助一些正在寻找SKAction替代方案的人。

你能发布一些关于如何创建和播放声音的代码吗?是的,我会用一些代码更新文章。目前还没有找到解决方案。如果有人知道的话,我很想知道原因。这是iOS中的一个bug,其他开发者已经对Stackoverflow发表了评论。我还在研究一个解决方法。你能发布一些关于如何创建和播放声音的代码吗?是的,我会用一些代码更新文章。仍然没有找到解决方法。如果有人知道的话,我很想知道原因。这是iOS中的一个bug,其他开发者已经对Stackoverflow发表了评论。我还在研究解决办法。