0

UIViewController を解放すると、UIViewController は正しく破棄されますが、dealloc メソッドは呼び出されません。

UIViewController が破棄された場合 (コンソールでは nil です)、保持カウントは 0 である必要があるため、-(void)deallocメソッドが呼び出されることを期待しています。

スーパークラス メソッドを呼び出さずに dealloc をオーバーライドして、UIViewController のサブクラスもチェックしましたが、そうではありません。

これは私がそれを初期化する方法です:

myViewController = [[MyViewController alloc] initWithViewController:statusPicker];

何が原因でしょうか? ありがとう

4

2 に答える 2

2

UIViewController が破棄された場合 (コンソールでは nil です)、保持カウントは 0 になるはずです。その結果、-(void)dealloc メソッドが呼び出されることが予想されます。

うーん、ダメ。であるという事実は、リリースされたことをnil意味しません。UIViewController簡単に言えば、 のポインタは をUIViewController指してnilいますが、 が存在するメモリUIViewControllerはまだ占有されています。が呼び出される代わりに、次のdealloc2 つのことが起こっている可能性があります。

1) への参照を持つ何か他のものがありますUIViewController(例: pushViewControllerA から B への参照がある場合、A は B への参照を取得します)。

2) メモリ リークが発生しました。

繰り返しますが、私はあなたが言ったことに基づいて答えています。

@Lefteris 自動参照カウント = NO

于 2012-10-09T10:56:52.360 に答える
0

循環参照がないことを確認してください。たとえば、View Controller がデリゲート プロトコルを実装している場合は、コードがこのデリゲートを保持していないことを確認してください。

于 2012-10-09T16:24:55.433 に答える