面白きことは良きことなり

拙く未熟なiOSエンジニアの備忘録と戯言

AVAudioPlayerで音が鳴らなかった問題

結論:インスタンスはプロパティで保持しろ

do {
    let player = try AVAudioPlayer(contentsOfURL: fileUrl)
    player.volume = 1.0
    player.numberOfLoops = 0
    guard player.prepareToPlay() else {
        return
    }
    player.play()
} catch let error as NSError {
    print(error.localizedDescription)
}

こんな処理を書いて音が鳴らない…なんで?としょうもないところで悩んだ。
シミュレーターだから?実機でもだめだ…ファイルパスは合ってる…とか調べて悩んでたけど、ググったらプロパティで作ったら鳴ったとかあった。
試したら見事に、その理由。

処理して音が鳴る前にローカル変数のインスタンスが破棄されてるみたいね。
プロパティを減らしてメモリ消費量を抑えるように心がけた結果、裏目にでた感じ。