gpt4 book ai didi

ios - Swift iOS 声音内存泄漏?

转载 作者:行者123 更新时间:2023-11-28 08:44:09 26 4
gpt4 key购买 nike

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

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

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

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

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

Screenshot

最佳答案

几个月前我遇到了这个问题,所以我尝试了 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 的良好替代品的一些人有所帮助。

关于ios - Swift iOS 声音内存泄漏?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/35741272/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com