Iphone UIAlertView内存问题
我已经创建了一个非常简单的iPhone应用程序,它有一个单一视图和一个带有显示UIAlertView操作的UIButton。 我正在使用以下代码Iphone UIAlertView内存问题,iphone,ios,memory-management,uialertview,instruments,Iphone,Ios,Memory Management,Uialertview,Instruments,我已经创建了一个非常简单的iPhone应用程序,它有一个单一视图和一个带有显示UIAlertView操作的UIButton。 我正在使用以下代码 - (IBAction)showAlert:(id)sender { UIAlertView *alert = [[UIAlertView alloc] initWithTitle:@"Error" message:@"Message" delegate:nil cancelButtonTitle:@"OK" otherButtonTitle
- (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
,但它仍然显示相同的内存状态和活动对象(高达50000)。但当我按下home(主页)按钮时,应用程序进入后台,你们可以在附加的图像中看到活体和使用的内存减少
问题:
我的代码怎么了
为什么即使在发布了UIAlertView
之后,它仍会显示高内存分配和活动对象
为什么我必须到后台释放内存和活动对象?我不会太担心,除非这是应用程序中的主要内存瓶颈,或者除非每个UIAlertView累积增加更多内存 你的代码是正确的。但是,即使您发布了UIAlertView,用户界面系统至少会一直保持它,直到您解除警报为止。除了UIAlertView本身,它还分配显示警报所需的图形资源。解除警报后,它取决于自动释放循环何时开始,以及缓存参数、内存是否释放以及何时释放
当您按下home按钮时,您的应用程序将进入后台,并且作为内存释放的一部分,将强制释放内存。也就是说,缓存被清空,自动释放周期被运行,等等。除非这是应用程序中的主要内存瓶颈,或者除非每个UIAlertView累积增加更多内存,否则我不会对此太担心 你的代码是正确的。但是,即使您发布了UIAlertView,用户界面系统至少会一直保持它,直到您解除警报为止。除了UIAlertView本身,它还分配显示警报所需的图形资源。解除警报后,它取决于自动释放循环何时开始,以及缓存参数、内存是否释放以及何时释放
当您按下home按钮时,您的应用程序将进入后台,并且作为内存释放的一部分,将强制释放内存。也就是说,缓存被清空,自动释放周期被运行,等等。实际上我正在开发另一个应用程序,我正在使用instruments工具进行内存优化,uialertview大大增加了活动对象,并且在按下home按钮之前不会减少使用量。所以我想解决这个问题。我很好奇,所以写了一个小测试程序。在我的测试中,只有第一个UIAlertView增加了内存,没有任何额外的内存。加起来只有25万,所以没什么好担心的。例如,它可能会缓存UIAlertView的背景图像。是的,首先会增加,但无论你在应用程序上花费多少时间,都不会减少。在我的测试应用程序中,第一次UIAlertView显示前的活动字节为670KB(8285个活动对象),显示警报后的活动字节为3.50MB(48000个活动对象)正如我在问题中所说,测试应用程序是一个简单的单视图应用程序,只有一个按钮,但看到我在上面评论中发布的数字,它令人震惊,我不知道如何处理它。我正在使用Xcode 4.6.1和Instrument 4.6在iOS 6.1.3 iPhone 4S上进行测试。实际上,我正在开发另一个应用程序,我正在使用instruments工具进行内存优化,uialertview大大增加了活动对象,在我按下home按钮之前不会减少使用量。所以我想解决这个问题。我很好奇,所以写了一个小测试程序。在我的测试中,只有第一个UIAlertView增加了内存,没有任何额外的内存。加起来只有25万,所以没什么好担心的。例如,它可能会缓存UIAlertView的背景图像。是的,首先会增加,但无论你在应用程序上花费多少时间,都不会减少。在我的测试应用程序中,第一次UIAlertView显示前的活动字节为670KB(8285个活动对象),显示警报后的活动字节为3.50MB(48000个活动对象)正如我在问题中所说,测试应用程序是一个简单的单视图应用程序,只有一个按钮,但看到我在上面评论中发布的数字,它令人震惊,我不知道如何处理它。我正在使用Xcode 4.6.1和Instrument 4.6在iOS 6.1.3 iPhone 4S上进行测试。