1

ここで以前に同様の質問が回答されたことは知っていますが、もう少しよく理解したいと思います。これが私のシナリオです...

以下に示すように、割り当てられた UIImageView を返すヘルパー クラス メソッドがあります。

+(UIImageView *)tableCellButton{
 return [[[UIImageView alloc] initWithImage:[UIImage imageNamed:@"image"]] autorelease];

}

次に、UIViewController メソッドの 1 つで、それをそのまま使用しています。

UIImageView *imageView = [Helper tableCellButton];
imageView.frame = cell.backgroundView.bounds;
imageView.tag = 250;
[cell.backgroundView addSubview:imageView];

私の質問は、この記憶がどのように解放されるかに関するものです。私は自動解放プール (アプリケーションが作成したもの以外) を使用しておらず、変数は iVar/Property ではありません (そのため、dealloc が呼び出されても解放されません)。この場合、呼び出した後にメモリを解放する責任がありますか? 自動解放はいつ機能しますか? 助けてくれてありがとう!

4

2 に答える 2

1

autoreleasetoを呼び出すとrelease、次回はイベントループを介してオブジェクトに送信されます。それはallocあなたがで行う呼び出しを説明しますtableCellButton。オブジェクトが保持される他の唯一の時間は、の内部であり、同じオブジェクトaddSubview自体も処理します。release上記のコードに基づいて、このオブジェクトのメモリ管理がチェックアウトされます。

于 2010-11-23T20:01:50.103 に答える
1

実行ループの各反復には、独自の自動解放プールがあります。

本質的には、次のように考えてください。

while(1)
{
    NSAutoreleasePool * pool = [[NSAutoreleasePool alloc] init];
    [someObject doSomething];
    [pool drain];
}
于 2010-11-23T20:04:16.800 に答える