1

私は を持っていIBOutlet UIImageView*ますViewController。Controller を解放した後 (もう必要ありません)、UIImageView* hasretainCount は 2 (コードには保持がありません) であり、2 回解放した後でも [これは完全に間違っていると思います] (Controllers でdealloc)UIImageViewメモリはまだ割り当てられています。UIViewControllerなぜそれが起こるのか、私の質問は - どうすれば解放した後にメモリを完全に解放できるのIBOutletsですか?

@interface GRULogInController (){
    IBOutlet UIImageView* bgImage;
}
@end
@implementation GRULogInController
....

- (void)viewDidUnload
{
    NSLog(@"%d", bgImage.retainCount); // Shows 2 !!!
    [bgImage release];
    [bgImage release]; // Object releases but memory not freed (It shown in Instruments)

    [super viewDidUnload];
}

- (void) dealloc
{
    [self viewDidUnload];
    [super dealloc];
}
4

2 に答える 2

1

まずはこちらのリンクをご覧ください。whentouseretaincount.com
有益なことは何もわかりません。

次に、iOS は、viewController を解放した直後ではなく、メモリが必要なときに viewController をパージします。
imageView を 2 回解放しないでください。viewController に処理させてください。

もう 1 つのことは、viewDidUnload は非推奨であり、代わりにコードを dealloc で実行する必要があることです。

于 2012-10-24T07:40:19.410 に答える
0

UIImageView* の保持カウントは 2 です

どうして知っていますか?頼らないでretainCountください。まだ:

1 - あなたのIBOutlet参照。

2 -UIViewその子 UI 要素への強力な参照。

これで、retainCount 2 (理論上) になりました。

計測器を使用して、メモリ リークが発生しているかどうかを確認します。また、フレデリックが指摘したように、使用しviewDidUnloadないでください。もう必要ありません。

于 2012-10-24T07:38:48.727 に答える