非常简单的代码,但是泄密了......检查出来。
- (void)loadView {
NSString * myTitle = @"HELLO";
NSString * message = @"\nThis stuff is leaking!\n";
NSString * cancelButton = @"Dismiss";
NSString * otherTitles = nil;
[self showAlert: myTitle : message: cancelButton : otherTitles];
}
- (void) showAlert: (NSString *) titulo : (NSString *) mensagem : (NSString *) cancelButton : (NSString *) otherButton {
UIAlertView * alertView = nil;
if (otherButton) {
alertView = [[UIAlertView alloc]
initWithTitle:titulo
message:mensagem
delegate:self cancelButtonTitle:cancelButton
otherButtonTitles:otherButton, nil ];
} else {
alertView = [[UIAlertView alloc]
initWithTitle:titulo
message:mensagem
delegate:self cancelButtonTitle:cancelButton
otherButtonTitles:nil ];
}
[alertView show];
[alertView release];
}
这是项目,如果你想尝试自己的乐器...... http://www.mediafire.com/download.php?hml2hl5laz9ez2j
我该如何解决?
感谢。
答案 0 :(得分:1)
我试图在仪器中自己运行它,而且我没有得到这些泄漏。代码的其他部分一定有问题,但这对我来说似乎很好。
我唯一能选择的是showAlert:
,[self showAlert: myTitle : message: cancelButton : otherTitles];
的运行方式。我认为这很难看,你应该将功能改为
- (void) showAlertWithTitle:(NSString *)title message:(NSString *)message cancelButton:(NSString *)cancelButton otherButton:(NSString *)otherButton
并使用[self showAlertWithTitle:title message:message cancelButton:cancelButton otherButton:otherButton];
运行它。
答案 1 :(得分:1)
代码似乎没有任何问题,甚至我已经想通了一些完全正确的代码也显示出一些泄漏,现在就我在某处阅读,即使使用分析工具也会显示一些泄漏因为工具本身就存在变量以防以后可能使用。
因此,最好的方法是将所有内容初始化为自动释放,并始终使用合成属性以避免泄漏。
如果您使用自动释放局部变量并且只使用合成属性来保存长期实例,那么分析器知道它不需要保留变量。
答案 2 :(得分:1)
所以,它似乎是一个框架泄漏。我正在向Apple报告此事。
答案 3 :(得分:0)
如果你自动发布UIAlert,你还会得到内存错误吗?所以,将其改为:
alertView = [[[UIAlertView alloc]
initWithTitle:titulo
message:mensagem
delegate:self cancelButtonTitle:cancelButton
otherButtonTitles:otherButton, nil ] autorelease;
您还应该删除[alertView release];
行。
但你是对的,这里我没有明显的记忆错误。