私は ARC を使用してかなり単純なアプリケーションを作成しました。ただし、メモリ不足に陥っていますが、何が原因なのかわかりません。何が原因なのかはっきりしないので、具体的な詳細と質問がいくつかあります。
新しいView Controllerをロードしようとすると、問題が発生します。このView Controllerは多数の画像をホストし、ロードされると、3〜4分のオーディオファイルをAVAudioPlayer
私が持っているシングルトンクラスに追加します。
この問題は、View Controller が 8 ~ 10 回プッシュおよびポップされると発生します。ビュー コントローラーがポップされると、 を呼び出しstop
て、AVAudioPlayer
関連するすべてのオブジェクト (AVAudioPlayer
インスタンスを含む) を nil に戻します。
何がメモリ リークを引き起こしているのか、またはデバイスのメモリを破壊している可能性があるものはよくわかりませんが、具体的な質問がいくつかあります。
を停止しAVAudioPlayer
ても、メモリ内で適切に解放できますか?
AVAudioPlayer
呼び出し後にポインタを nil に設定するとstop
、システムがデバイス メモリから特定のデータを解放できなくなりますか?
ARC では、所有者の割り当てが解除されたときに何も解放されるべきではありませんか (UIViewController
スタックから取り出されたすべてのビューとデータについて質問しています)。
知っておくべき ARCに関する、AVFoundation
またはARC 内の問題はありますか?AVAudioPlayer
stop
オーディオ セッションを終了する方法が間違っているか、それを解放する必要がありますか?
編集:割り当てとリークを追跡するために、instruments ツールの使用を開始しました。ツールによると、メモリ リークは発生していませんが、実際のバイト数に関係なく、アプリケーションはクラッシュします。使用される RAM の合計が 200MB (210 ~ 230MB - 私のデバイスには 256MB の RAM があります) を超えると、アプリケーションはクラッシュします。私の新しい質問は、割り当てられた合計バイト数 (ライブでなくても) がメモリ クラッシュに影響するかどうかです。もしそうなら、どうすればこれを防ぐことができますか?
これは、クラッシュした実行のイメージです。最後に、メモリ警告の塊が表示されます。