1

ARC への移行後に Instrument を使用すると、画面からの移行によってメモリが消去されないことがわかりました。手順の例:

1)ホーム画面A→ゲーム画面B=メモリ使用量上昇 2)ゲームが終了し、画面Bからホーム画面Aに戻る

ステップ 2 では、メモリ使用量は低下しません。画面から画面 B を削除するときに、画面 B によって消費されるメモリを解放したいのですが、この解放を確実に行うにはどうすればよいですか?

A から B へ:

GameVC_iPad *game = [[GameVC_iPad alloc]initWithNibName:@"ClassicGameVC_iPad" bundle:nil]; [self presentViewController:game animation:YES 完了:nil];

B から A に戻るには、次のコードを使用します。

HomeVC_iPad *home = [[HomeVC_iPad alloc]initWithNibName:@"HomeVC_iPad" bundle:nil]; home.modalTransitionStyle = UIModalTransitionStyleCrossDissolve; [self presentViewController:ホーム アニメート:YES 完了:nil];

どんな手掛かり ?

4

3 に答える 3

2

Aに戻るときは、次のことを行う必要があります

[self dismissModalViewControllerAnimated:YES];

あなたが現在行っていることは、間違っている新しいView Controllerを作成していて、別の時間にナビゲートしているため、これが起こっていることです

A が B を提示すると、新しい A が提示され、次に新しい B が提示されます。

また、新しいviewControllerに移動すると、iOSは一部のビューデータをキャッシュするため、戻る前と後に完全なメモリ使用量を達成することは決してできないことに注意してください.

于 2012-06-17T14:42:37.953 に答える
0

ホーム コントローラーの新しいコピーを作成しないでください。dismissViewControllerAnimated:completion:既存のものに戻すために使用します。

于 2012-06-17T14:43:04.457 に答える
0

b のデリゲート クラスを作成する場合、たとえば、それを BDelegate と呼び、A の ViewController をそのプロトコルに準拠させた場合、B を削除してほしいというメッセージを A に簡単に返すことができます。たとえば、次のように作成できます。

BDelegate :

@protocol BDelegate <NSObject>

- (void)dismissViewB;

@end

次に、A (ヘッダー ファイル) のビュー コントローラーを次のように変更します。

@interface AViewController : UIViewController <BDelegate>

明らかに、そこにあるView Controllerの実際の名前を使用します。View Controller A の body に、以下のメソッドを追加します。

- (void)dismissViewB {
    [self dismissViewControllerAnimated:YES completion:NULL];
}

もうすぐそこ!Bビューコントローラーで、実際にビューを削除したい場所にあるので、現在どこにあると思いますか

HomeVC_iPad *home = [[HomeVC_iPad alloc]initWithNibName:@"HomeVC_iPad" bundle:nil];
home.modalTransitionStyle = UIModalTransitionStyleCrossDissolve; 
[self presentViewController:home animated:YES completion:nil];

それを

[delegate dismissViewB];

ビュー コントローラー B 内で必要なのは、A のデリゲートを指し、それを割り当てるためのインスタンス変数だけです。したがって、コントローラーBのヘッダーに次のようなものを追加します

NSObject<BDelegate> *delegate;

そして、それに適切な @property を追加し、本体に @synthesis します。次に、最初の投稿のようにView Controller Bを作成するときに、追加するだけです

game.delegate = self

次に、すべてがうまくいった場合、ボタンをタップするか、ビューを削除するために必要なことを行うと、View Controller A がそれを閉じます:)

お役に立てれば

于 2012-06-26T10:53:20.100 に答える