0

10.8 で AVFoundation を使用するように作成されたシンプルな小さな音楽プレーヤーがあります。それはうまく機能しますが、最近ARCを紹介されたばかりで、問題が発生しています。

アプリケーションはドキュメント ベースであり、必要なコードの大部分は事前に作成された Document.h/.m ファイルに含まれています。ヘッダーで定義された __strong AVAudioPlayer オブジェクトがあり、実装内のすべての関数がオーディオ ファイルの再生に使用します。ファイルは標準の readFromURL: メソッドでロードされます。

ドキュメントを閉じると、ファイルが解放されず、再生が続行されます。AVAudioPlayer が弱い設定になっていると、すぐに解放され、ファイルが再生されなくなります。

私がここに欠けているものはありますか?ARC では手動で解放できないことはわかっていますが、何がオブジェクトを拘束しているのでしょうか?

4

1 に答える 1

1

ARC のオブジェクト ポインターは、デフォルトで強力です。AVAudioPlayer弱いと定義されておらず、まだ存在するオブジェクト/クラスにあるあなたへの参照は、割り当てが解除されないようにします。ファイルの再生が続く場合は、おそらく ARC の問題ではなく、AVAudioPlayer.

ARC でメモリを「解放」する方法は、オブジェクトへのポインタを に設定することnilです。オブジェクトへの他の参照がない場合は、割り当てが解除されます。

于 2012-08-12T19:05:44.707 に答える