gpt4 book ai didi

iphone - UIAlertView - 显示导致内存泄漏

转载 作者:行者123 更新时间:2023-12-03 18:54:23 25 4
gpt4 key购买 nike

我对 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 吗?

感谢您的帮助!

最佳答案

如果您意识到 [alert show] 不会立即将警报显示在屏幕上,那么这是有道理的。我认为发生的情况是 [警报显示] 将警报添加到系统中保留警报的某个队列中。 直到您从该函数返回并返回到事件循环之前,它实际上不会显示。当它最终被解除时,这些保留计数将减少,然后被释放。

如果您要从 UIAlertView 的委托(delegate)例程(例如 didPresentAlertView)记录消息,我敢打赌,直到您的函数结束、“释放”警报之后,这种情况才会发生。释放并不总是意味着解除分配,它只是放弃所有权。如果没有剩余所有者,它只会导致释放。

关于iphone - UIAlertView - 显示导致内存泄漏,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2862335/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com