1

アプリでメモリの問題に直面しています。

私はナビベースのアプリを持っています。すべてのコントローラーを押したり、ポップしたり、押したりすると、メモリの過負荷のためにアプリが閉じます。

それは私たちが保持サイクルと呼んでいるものだと思います:

私はカスタムナビゲーションコントローラーを持っています: MyNavController、このコントローラーは私のルートコントローラーであり、メインをプッシュしUIViewControllerます: MyMainController、アプリがアプリを起動すると、約130 MBのメモリが使用され、新しいコントローラーをプッシュすると、メモリは160になり、ポップしますこのコントローラー:メモリはまだ160(正確には159)であり、別のView Controllerをプッシュします:メモリは190 MBまで増加します...メモリは決してダウンしません。

  • それが保持サイクルであることを確認できますか?

  • ビューコントローラーをポップするときに間違っていなければ、メモリはビューコントローラーのメモリサイズを減らす必要がありますか?

  • 私は常にプロパティ (ボタン、ビュー、customView、customObject...) にストロングを使用しますが、第 2 レベルのコントローラーの dealloc メソッドにブレークポイントを設定すると、それが呼び出されることがわかっているので、コントローラーを解放する必要がありますか?

  • 私は何かを試してみました:私は空UIViewControllerを作り、xib のビューをリリースされていないコントローラーの 1 つに設定しました。カスタムコードは何もありません。このコントローラーを押すとメモリが上がり、ポップしてもメモリは下がりません! 何を探す必要があるのか​​本当にわかりませんMainViewController。またはコントローラーでスタックをプッシュしますか?

次を使用してコントローラーをロードするだけです。

GeoControllerViewController *aGeoController = [[GeoControllerViewController alloc] initWithNibName:@"GeoControllerViewController" bundle:nil];
aGeoController.dictionnaryModele = _dicCours;
[self.navigationController pushViewController:aGeoController animated:YES];

前もって感謝します。

4

2 に答える 2

0

率直に言って、130MB は一般的に最初は多すぎるようです。

  • 私はそれについて確信が持てません。問題は、ナビゲーションコントローラー以外のコントローラーへの参照を保持していますか? 漏れもあるかもしれません。これらのコントローラが大量のメモリを消費するのはなぜですか?

  • はい、メモリ消費量は少なくなるはずです。

  • あなたの質問が正しいかどうかわかりません。通常、強力なプロパティは問題ありませんが、2 つのオブジェクトが互いに強いプロパティを保持している場合など、注意が必要です。deallocARCでも呼び出されるので、オブジェクトが解放された瞬間にログアウトできます。

于 2013-10-17T07:22:35.763 に答える