0

モーダルビューを閉じるという奇妙な問題に直面しています。

次のようなモーダル ビューを提示します。

 ResepiDetail *detail =(ResepiDetail*)[[ResepiDetail alloc]init];
 [self presentModalViewController:detail animated:YES]; 

戻るボタンで次のように閉じます。

[self dismissModalViewControllerAnimated:YES];

この後、ビューは閉じて前のビューに戻りますが、メモリから解放されません。通知メッセージを送信してそれを見つけ、そのビューがそれを受け取りました。さらに、VM メモリ割り当てを追跡しようとしましたが、ビューがまだメモリ内にあるようです。

私はARCを使用しており、完全に機能する別のビューに同じ方法を使用しています。

4

1 に答える 1

0

投稿されているように、コードは問題ないので、続行する方法についてのヒントを次に示します。

ビュー コントローラの割り当てが解除されていないことを確認する確実な方法は、dealloc をオーバーライドして、識別可能なものをログに記録することです。明示的に呼び出さないでくださいsuper。予期したときにログが表示されない場合は、問題があります。

絶対に問題があると判断したと仮定すると、問題は保持サイクルを見つけることになります。のインスタンスResepiControllerが解放されていないという問題がある場合は、次を探す必要があります...

  1. それへの参照をResepiController持つクラス外のコード。strongたとえば、クラスが他のクラスのデリゲートとしてサインアップする場合は、デリゲートがstrong参照を使用していないことを確認してください。
  2. 暗黙的に保持されている可能性のある内部ブロックself。プログラムのどこかに、コントローラーを解放する必要があると思われる時点でコントローラーを参照している可能性のあるブロックはありますか?
于 2012-08-15T15:17:32.817 に答える