- ベストアンサー
AVAudioPlayerのインスタン作成場所について知りたい
- iPhoneの自作アプリで音声に関する場所を作成している時、AVAudioPlayerのインスタンスを生成する場所について知りたい。
- また、処理を実行する際に毎回ファイルを読み込んでインスタンスを生成してしまうのは避けたい。
- さらに、メモリリークの問題やAVAudioPlayerの複数の音声を同時再生する方法についてもアドバイスをいただきたい。
- みんなの回答 (2)
- 専門家の回答
質問者が選んだベストアンサー
なんだか以前見たことのある質問だな、もしかしてデジャブ?と思いながら過去質問を検索してみたら、あなたはおなじ問題で8月頃から質問をなさっているのですね?まだ解決できませんか?ここで停滞している間に、時代のほうがあなたを追い越してしまいそうです。先日公開されたiOS 5から、ARC(Automatic Reference Counter)というメカニズムが追加され、retain、releaseを記述しなくても良くなりました。コンパイラが適宜インスタンスの保持と開放を行ってくれるようになります。(Xcode 3、iOS 4.3以前の環境では、いままでと変わりませんが) メソッド「touchesMoved」は、短いスタンスで繰り返し呼び出されるという説明は、私からあなたにしています(それもいちどだけでなく)。そういうメソッド内で、AVAudioPlayerのインスタンスを生成していたら、メモリリークが起きるのはとうぜんです。 AVAudioPlayerインスタンスの生成は、そのインスタンスの初期化時にいちどだけ行い、そのインスタンス解放時にいっしょに開放すれば、メモリリークは起こらないでしょう。AVAudioPlayerインスタンスの生成は、基本は「init~」メソッド内で、Intereface Builderで生成したインスタンスの場合は、「awakeFromNib」メソッド内で、UIViewController(のサブクラス)インスタンスであれば、「viewDidLoad」メソッドに記述します。AVAudioPlayerインスタンスの開放は、おっしゃるとおり「dealloc」メソッドで行います。 なお、AVAudioPlayerインスタンスをすぐに再生できるように、「prepareToPlay」を利用するといいでしょう。メソッド名そのとおり、すぐ再生できるよう準備しておくメソッドです。
その他の回答 (1)
- harawo
- ベストアンサー率58% (3742/6450)
書き忘れましたが、AVAudioPlayerインスタンス名は、ヘッダファイルにインスタンス変数として宣言してください。