在函数调用后保留计数。我应该担心吗?

时间:2010-02-23 09:43:18

标签: iphone function count call retain

我通常不检查保留计数,直到程序泄漏。但今天(我不知道)我检查了保留计数,现在我很困惑。

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是什么。)

1 个答案:

答案 0 :(得分:1)

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

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