【发布时间】:2011-02-21 04:25:16
【问题描述】:
我对 iPhone 开发比较陌生,所以这可能是我的错,但这与我所看到的背道而驰。 :)
我认为我正在创建一个 UIAlertView,它恰好存在于“if”语句的这个真空中。
NSData *data = [NSURLConnection sendSynchronousRequest:request returningResponse:&response error:&error];
if(!data)
{
// Add an alert
UIAlertView *alert = [[UIAlertView alloc] initWithTitle:@"Error"
message:@"Unable to contact server"
delegate:nil
cancelButtonTitle:@"Ok"
otherButtonTitles:nil];
NSLog(@"retain count before show: %i", alert.retainCount);
[alert show];
NSLog(@"retain count before release: %i", alert.retainCount);
[alert release];
NSLog(@"retain count after release: %i", alert.retainCount);
return nil;
}
但是,控制台日志让我感到困惑。
retain count before show: 1
retain count before release: 6
retain count after release: 5
我也尝试过添加:
alert = nil;
发布后。这使得保留计数为 0,但我仍然显示泄漏。如果有帮助,泄漏的责任框架是 UIKeyboardInputManagerClassForInputMode。我也在使用 OS 4 Beta 3。
所以有人知道本地 UIAlertView 的保留计数如何在调用 -show 时将自身增加 5 吗?
感谢您的帮助!
【问题讨论】:
-
我看到了同样的事情——iOS 4.1 的发布版本。发布似乎无关紧要,我尝试了 Autorelease——同样的事情。这一定是操作系统的错误吧?
-
我今天在 iOS 4.1 下也看到了同样的情况,感谢您提出这个问题。
-
但是如何解决这个问题呢?我也有同样的情况。分配后retainccount为1;显示 alertView 后,retaincount 为 6 释放后,retaincount 保持 5 -> 并发生内存泄漏
-
mock p:完全没有问题。只是,随着发布,您删除了您的保留。在所有其他窗口和控制器删除它们的保留后,alertView 对象将被杀死。如果您不释放它,则在所有其他人释放该对象后,保留计数将保持为 1,您将有泄漏。
标签: iphone uialertview retain memory-leaks