Objective C のメモリ管理に問題があります。Advanced Memory Management Programming Guideを読みましたが、ARC を完全に放棄してメモリを手動で管理するという例外を除いて、問題の解決策が見つかりません。
問題は次のとおりです。
Controller
特定の時間に何をすべきかに関する情報を保持するクラスを作成しました。
このController
クラスは、アプリの残りの部分にビデオを再生するように指示します (たとえば)。ビデオは正常に再生されます。ビデオの再生が終了すると、Controller
クラスは次に何をすべきかを理解します。
残念ながら、Controller
ビデオの再生が開始されるとすぐに、ARC によってクラスが解放され、割り当てが解除されます。そのため、ビデオが終了するまでに、アプリはController
クラスを呼び出して次に何をすべきかを確認し、全体がクラッシュします。EXC_BAD_ACCESS
クラスがメモリ内にないため、取得します。
Controller
ビデオの再生を開始するように指示した後、何もしないため、ARC がクラスをリリースしていることがわかります。しかし、再び必要になるまで、そのクラスを保持したいと思います。
次のように、このクラスをプロパティとして宣言しています。
@property (strong, nonatomic) Controller * controller;
しかし、それにもかかわらず、ARCは何もしないとすぐにクラスをリリースし続けます。
編集:
このプロパティを App Delegate に移動しました。しかし、ARCはまだそれをリリースしています。このクラスの複数のコピーを持つ可能性が必要なので、これをシングルトンに変えることはできません。
ARC によるオブジェクトの解放を停止したくない場合、どのように停止できますか??
何もしていない間、オブジェクトをメモリに保持することは可能ですか?
これはまったく可能ですか?または、ARC を放棄して、メモリ管理を手動で行う必要がありますか?