1

私は通常、プログラムがリークするまで保持カウントをチェックしません。しかし、今日(私はいけません)私は保持カウントをチェックしました、そして今私は混乱しています。

NSString *strErrorMessage; 
    strErrorMessage= [NSString  stringWithFormat:@"Email and Password are mandatory"];
            NSLog(@"%d", [strErrorMessage retainCount]); // retain count 1
    [objAppDelegate ShowMesssage:strErrorMessage];
    NSLog(@"%d", [strErrorMessage retainCount]); // retain count 3
    return;

私はこれを取得しません。strErrorMessageを割り当てないので、それを解放する必要はありませんか?

strErrorMessageの所有者です。

-(void) ShowMesssage: (NSString *)strError
 {
 UIAlertView *alertError = [[UIAlertView alloc] initWithTitle:strTitle   message:strError delegate:self cancelButtonTitle:@"OK" otherButtonTitles:nil];
 [alertError show];
 [alertError release];
   }

ここでstrErrorをリリースする必要がありますか?

4

1 に答える 1

1

通常、保持カウントをチェックすることはメモリリークをデバッグするための良い方法ではないため、メモリをどこに割り当て/解放するかを理解している限り、あまり心配する必要はありません。ここでは、エラーメッセージを自動解放し、alertErrorを手動で解放しているので、大丈夫だと思います。

私は2つの余分な保持がにあると思いUIAlertViewます。正しく機能するには、エラーメッセージ文字列を少なくとも1回保持する必要があります。2番目の保持は、おそらく内部実装の詳細にすぎません。

于 2010-02-23T09:50:22.713 に答える