2012-11-04 24 views
2

我使用UIAlertview来输入一些文本,它工作正常。 但是,在警报视图关闭后,在警报视图打开之前(从9MB到26 MB),内存仍有超过17MB的增加。我使用仪器分配来测量堆内存和活动监视器来测量它。他们都显示了类似的结果。当我切换到其他应用程序时,由alertview增加的内存将降低到适当的水平。这是正常的吗?我的环境是iPhone4 + iOS6。 这是一些尝试的代码。iPhone UIAlertview放弃内存

UIAlertView *alert = [[UIAlertView alloc] initWithTitle:@"input caption" message:@"text" 
                delegate:self cancelButtonTitle:@"cancel" otherButtonTitles:@"OK", nil]; 
    [alert show]; 
    [alert release]; 

谢谢。


亲爱的函数naveed S和呼噜声 非常感谢你。 我不确定我是否按照你的建议正确。但是我使用Activity监视器观看Real mem,在alertview关闭后内存仍然增加大约20 MB。我删除后[警报显示] [警报发布],和我写

[alert show]; 
//[alert release]; 

- (void)alertView:(UIAlertView *)alertView clickedButtonAtIndex:(NSInteger)buttonIndex 
{ [alertView dismissWithClickedButtonIndex:buttonIndex animated:YES]; 
    [alertView autorelease];              }  

Moreovre,内存减少时,应用程序进入后台模式后,我按HOME。 (这与我以前的代码相似)。我怎样才能正确地看到放弃的内存。我甚至不知道如何以正确的方式观看它.....

顺便说一句,我的原始代码按照这里的帖子。 Uialertview and memory management

+2

我不认为你应该看到由于UIAlertView导致的20MB内存浪涌。必须有其他事情发生.... –

+0

我使用乐器活动监视器来查看真实的mem,它显示9.20 MB之前显示alertview,但它显示关闭alertview后26 MB。我继续这样做,真正的内存节目稳定地靠近26MB。当我打开safari或按回家时,它显示11.6MB。我猜iOS会为alertview或textfield做一些内存缓存(在alertview中有一个文本框)。切换到其他应用程序时,此缓存将减少。总之,我认为这是不正常的,但我不怎么解决它。 –

+0

警报关闭时调用哪些代码? – CodaFi

回答

1

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

更重要的是,转换成ARC并设有手动-retain-release-autorelease完成;)

如果你不转换为ARC,这样做:请从代码 - 释放你的原职,在您的-alertView:didDismissWithButtonIndex:方法中取消对//CRASH的注释并将-release更改为-autorelease

+0

PLZ查看以下答案,我不确定它是否有效... –

+0

亲爱的Naveed S和Purr,非常感谢。我不确定我是否正确地遵循了您的建议。但是我使用Activity监视器观看Real mem,在alertview关闭后内存仍然增加大约20 MB。我在[alert show]后删除[alert release],并且我写了 [alert show]; // [警报发布]; (无效)alertView:(UIAlertView *)alertView clickedButtonAtIndex:(NSInteger)buttonIndex {[alertView dismissWithClickedButtonIndex:buttonIndex animated:YES]; [alertView autorelease]; –