0

ユーザーがステージで入力したすべてのデータを「保存」する最終ステージの前に、いくつかのView Controllerが重なり合っているアプリケーションがあります。データの入力段階では、ユーザーは戻ってデータの一部を変更できます。ただし、多くのメモリを消費するため、一部のデータ構造を解放したいと考えています。viewdidunloadデバイスのメモリが不足しているときにのみ呼び出されるため、途中で解放することはできません。viewDidDisappearユーザーが戻って何かを変更したい場合、データがそこにないため、それを解放することもできません。

これを行う方法は、前のビューコントローラーへのポインターを設定しviewcontrollers、前のビューコントローラーへのポインターでリリース関数を呼び出して物を解放することだと思います。

どうすればいいですか?

私は次のようなものを置くと思います

#import "SomeViewController.h"

@property SomeViewController someViewController;

.hファイルに?ここからどこへ行けばいいのかわからない。

4

2 に答える 2

2

あまりにも多くのメモリを使用している場合、システムは、DIY システムよりも効率的な方法でそれを処理します。そのため、メモリ警告、ARC、プール、およびその他すべての優れた機能が最初から用意されています。したがって、達成しようとしていることに反対し、それに応じてメモリ警告を処理することをお勧めします。ところで、viewControllers にデータを格納するのは良い方法ではないことに注意してください。代わりに、データ構造を別のオブジェクトに保持する必要があります (MVC が示唆するように)。たとえば、すべてのView Controllerからアクセスできるシングルトンオブジェクトにデータを保持できます。このようにして、すべてのVCチェーンへのポインターを保持せずに、不要になったメモリを解放することもできます。

于 2012-08-17T15:18:50.017 に答える
0

保存しようとしているデータの種類によって異なります。iOS のデータ ストレージの階層を上っていきます。NSUserDefaults が役立つかどうかを確認してください(質問の性質上、役に立たないと思います)。次に、SQLite を試します。次に、コアデータに進みます。データの性質によっては、データをファイルに保存することもできます。レベルをナビゲートするときに、このすべての中間データの保存を処理する別のクラスに静的メソッドを含めることができれば、それは素晴らしいことです。最終的なデータを保存したら、すべての一時ストレージを削除して完了です。

ああ、この手法を使用するもう 1 つの利点は、ユーザーが何らかの理由でアプリを強制終了して再起動するか、アプリが予期せずクラッシュした場合に備えて、「以前に中断したところから続行する」ことです。そのような場合は、ナビゲーションがどのレベルまで行われたかを確認し、そこから続行します。

于 2012-08-17T15:18:29.297 に答える