0

私はこのコードを使用します。

- (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions
{
    // Override point for customization after application launch.

    view = [[UIView alloc] init];

    [_window addSubview:view];

    [view release];

    NSLog(@"count - %d", [view retainCount]);

    [self.window makeKeyAndVisible];

    return YES;

}


- (IBAction)click{

    NSLog(@"count - %d", [view retainCount]); 

}

クリックしてuibuttonにすると、ビューはカウント= 2を保持します。なぜこれが発生するのですか?

4

3 に答える 3

6

保持カウントを当てにしないでください。機器を起動し、漏れがないか確認します。Appleは、デバッグ目的でのretainCountの使用を推奨していません。

重要:この方法は、通常、メモリ管理の問題をデバッグするのに価値がありません。任意の数のフレームワークオブジェクトがオブジェクトへの参照を保持するためにオブジェクトを保持している可能性があると同時に、自動解放プールがオブジェクトの任意の数の遅延リリースを保持している可能性があるため、これから有用な情報を取得できる可能性はほとんどありません。方法。

NSObjectProtocolとretainCountのドキュメントをご覧ください。保持カウントの詳細については、メモリ管理プログラミングガイドをお読みください。

于 2011-06-08T09:09:57.350 に答える
1

私が間違っていなければ、それは_windowまたは他のオブジェクトによって保持される可能性があるので[view retainCount];deallocメソッドを呼び出すと、おそらくを取得しretain count = 0ます。

Nick Weaverが言っretainCountたように、メモリの問題をデバッグしている間は、リークを検出するために使用しないでください。

于 2011-06-08T09:11:02.143 に答える
0

保持カウントの値を気にしない方がよいでしょう。メモリ管理ルールに従うだけです。必要なときに所有権を取得し、終了したら所有権を放棄すれば、問題は発生しません。

あなたがretainCountを見ているなら、あなたは物事を間違った方法で行っている、そしてあなたは単にあなた自身を混乱させるでしょう。

オブジェクトを保持できる回数に関する唯一のルールは、各保持とリリースのバランスをとる必要があるということです。

于 2011-06-08T09:14:05.037 に答える