3

UIViewControllers を再利用するためのベスト プラクティスは何ですか? 多くのアプリ (Apple 独自の例を含む: SQLiteBooks など) では、UIViewController が割り当てられ、UIViewController がスタックにプッシュされるたびに初期化されます。これにより、新しいコントローラごとにメモリの使用量が増加します。これは、オブジェクトがメモリ内に留まり、再度使用されないためです。

それをより良くする方法は?

4

5 に答える 5

1

ビューコントローラはあなたのビューではないことを忘れないでください。

ビューコントローラによって保持されているビューはアンロードできるため、ビューコントローラ自体は非常に軽量です。フットプリントを本当に軽くしたい場合は、コントローラーがviewDidUnloadで割り当てた他のデータを無効にすることができます(ほとんどの場合、メモリ警告があるときに呼び出されますが、3.0のみです)。

すでに述べたように、ほとんどの場合、ビューコントローラは、離れる(ヒットバックする)と割り当てが解除されるため、通常、ビューコントローラがぶら下がることはありません。ただし、ユーザーが残したのと同じ状態でそのビューを再度開きたい場合は、参照を残しておくと便利な場合があります(アプリの起動間では機能しません)。

于 2009-06-23T16:16:15.737 に答える
1

ビュー コントローラーの dealloc 関数にブレークポイントを設定し、ウィンドウからビュー コントローラーを削除したときに呼び出されるようにします。記憶は蓄積し続けるべきではありません。コントローラーを適切に作成して自動解放している場合 (上記の LostInTransit が示すように)、各コントローラーのメモリは削除時に解放されるはずです。

dealloc が呼び出されていない場合は、アプリのどこかにビュー コントローラーへの参照がまだ存在していることを意味します。

于 2009-06-23T13:04:55.637 に答える
1

これは、新しいビューコントローラーを作成するときに私が行うことであり、ビューがウィンドウから削除されるとメモリが解放されます

MyViewController *mvc = [[[MyViewController alloc] initWithNibName:@"MyView" bundle:nil] autorelease];
[[self navigationController] pushViewController:mvc animated:YES];
于 2009-06-23T12:56:21.927 に答える