iPhone UIAlertview放弃内存

时间:2012-11-04 04:00:18

标签: ios memory-management uialertview memory-leaks

我使用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

1 个答案:

答案 0 :(得分:1)

首先,您应该自动发布alertView。 -alertView:didDismissWithButtonIndex:调用UIAlertView,因此当您的方法返回时,alertView对象仍然有效(不是-release'd)。

更好的是,转换为ARC并完成手动-retain-release-autorelease;)

如果您没有转换为ARC,请执行以下操作:从原始帖子中的代码中删除-release,取消注释//CRASH方法中的-alertView:didDismissWithButtonIndex:并更改-release-autorelease那里。