我通常不检查保留计数,直到程序泄漏。但今天(我不知道)我检查了保留计数,现在我很困惑。
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是什么。)
答案 0 :(得分:1)
检查保留计数通常不是调试内存泄漏的好方法,因此只要您了解分配/释放内存的位置,我就不会过分担心。在这里,您将自动释放错误消息并手动释放alertError,因此我认为您没问题。
我猜这两个额外的保留在UIAlertView
。它必须至少保留一次错误消息字符串才能正常工作。第二个保留可能只是一些内部实现细节。