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 吗?(我认为不需要,但是保留计数 3 是什么)。

4

1 回答 1

1

检查保留计数通常不是调试内存泄漏的好方法,因此只要您了解分配/释放内存的位置,我就不会太担心。在这里,您将自动释放错误消息并手动释放 alertError,所以我认为您没问题。

我猜这两个额外的保留在UIAlertView. 它必须至少保留一次错误消息字符串才能正常工作。第二个保留可能只是一些内部实现细节。

于 2010-02-23T09:50:22.713 回答