UIAlertView 内存问题

Posted

技术标签:

【中文标题】UIAlertView 内存问题【英文标题】:UIAlertView memory issues 【发布时间】:2013-04-15 07:30:03 【问题描述】:

我创建了一个非常简单的 iPhone 应用程序,它具有单个视图和一个 UIButton,其中包含用于显示 UIAlertView 的操作。 我正在使用以下代码

- (IBAction)showAlert:(id)sender 
     UIAlertView *alert = [[UIAlertView alloc] initWithTitle:@"Error" message:@"Message" delegate:nil cancelButtonTitle:@"OK" otherButtonTitles:nil, nil];
     [alert show];
     [alert release];

附上仪器分配工具屏幕截图。

在图像中,低内存分配显示应用程序正在运行而没有显示UIAlertView,而在我显示UIAlertView 之后,高峰值显示内存使用情况,即使我已经解除了UIAlertView 并释放它,但它继续显示相同的内存状态和有生命的物体(高达 50,000 个)。但是当我按下主页按钮时,应用程序进入后台,您可以在附加的图像中看到活体对象和使用的内存减少。

问题:

我的代码有什么问题?

为什么即使在释放UIAlertView 之后,它仍然显示高内存分配和活动对象?

为什么我必须去后台释放内存和活物?

【问题讨论】:

【参考方案1】:

我不会太担心它,除非这是您的应用程序中的主要内存瓶颈,或者除非每个 UIAlertView 累积地增加了更多内存。

您的代码是正确的。但是即使您释放了 UIAlertView,用户界面系统至少会保留它,直到您关闭警报。除了 UIAlertView 本身,它还分配显示警报所需的图形资源。解除警报后,这取决于自动释放循环何时启动、缓存参数、内存是否以及何时释放。

当您按下主页按钮时,您的应用程序会进入后台,并作为该内存释放的一部分被强制执行。即清空缓存,运行自动释放周期等。

【讨论】:

实际上我正在开发其他应用程序,我正在使用仪器工具进行内存优化,而 uialertview 大大增加了生活对象,并且在我按下主页按钮之前不会减少使用量。所以我想解决这个问题。 我很好奇,所以写了一个小测试程序。在我的测试中,只有第一个 UIAlertView 增加了内存,而不是任何额外的。而且增加只有250k,所以不用担心。例如,它可能会缓存 UIAlertView 的背景图像。 是的,无论您在应用程序上花费多少时间,都会先增加,但不会减少。在我的测试应用程序中,第一次 UIAlertView 显示之前的活动字节为 670KB(8285 个活动对象),显示警报活动之后的活动字节为 3.50MB(48,000 个活动对象) 正如我在我的问题中所说的测试应用程序是简单的单视图应用程序,只有 1 个按钮,但看到我在上面发布的数字 cmets 它令人震惊,我不知道如何处理这个 我正在使用 Xcode 4.6.1 和 Insturment 4.6 在 ios 6.1.3 iPhone 4S 上进行测试。

以上是关于UIAlertView 内存问题的主要内容,如果未能解决你的问题,请参考以下文章

多个 UIAlertView 问题

UIAlertView 按钮操作

如何设置 UIAlertView 的高度和宽度?

UIAlertView 滚动问题

应用访问地图服务时系统弹出UIAlertView,可以更改UIAlertView的消息吗?

自定义默认 UIAlertView