我使用UIAlertview输入一些文本,它工作正常。 但是,在关闭警报视图后,在打开警报视图(从9MB到26 MB)之前,内存仍会增加超过17MB。我使用仪器分配来测量堆内存和活动监视器来测量它。它们都显示出类似的结果。当我切换到其他应用程序时,alertview增加的内存将降低到适当的水平。这是正常的吗?我的环境是iPhone4 + iOS6。 这是一些尝试的代码。
UIAlertView *alert = [[UIAlertView alloc] initWithTitle:@"input caption" message:@"text"
delegate:self cancelButtonTitle:@"cancel" otherButtonTitles:@"OK", nil];
[alert show];
[alert release];
谢谢。
亲爱的Naveed S和Purr, 非常感谢你。 我不确定我是否正确地遵循了您的建议。但我使用Activity监视器观看Real mem,在alertview关闭后内存仍然增加约20 MB。我在[alert show]之后删除了[alert release],我写了
[alert show];
//[alert release];
- (void)alertView:(UIAlertView *)alertView clickedButtonAtIndex:(NSInteger)buttonIndex
{ [alertView dismissWithClickedButtonIndex:buttonIndex animated:YES];
[alertView autorelease]; }
Moreovre,当我按回家后应用程序进入后台模式时内存减少。 (这与我之前的代码类似)。我怎么能正确地观察放弃记忆。我甚至不确定如何以正确的方式观看它......
顺便说一句,我的原始代码在这里发布。 Uialertview and memory management答案 0 :(得分:1)
首先,您应该自动发布alertView。 -alertView:didDismissWithButtonIndex:
调用UIAlertView
,因此当您的方法返回时,alertView对象仍然有效(不是-release'd
)。
更好的是,转换为ARC并完成手动-retain
,-release
和-autorelease
;)
如果您没有转换为ARC,请执行以下操作:从原始帖子中的代码中删除-release,取消注释//CRASH
方法中的-alertView:didDismissWithButtonIndex:
并更改-release
到-autorelease
那里。