Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/objective-c/27.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Iphone 调用didReceiveMemoryWarning时向用户生成警报_Iphone_Objective C_Ios Simulator - Fatal编程技术网

Iphone 调用didReceiveMemoryWarning时向用户生成警报

Iphone 调用didReceiveMemoryWarning时向用户生成警报,iphone,objective-c,ios-simulator,Iphone,Objective C,Ios Simulator,我见过一些应用程序在检测到内存不足时会发出警告。我尝试在我的应用程序中执行此操作,但遇到了问题。使用模拟器模拟内存警告,生成的警报会在我点击“ok”之前弹出两次,然后再弹出9次,直到最后消失 在调用didReceiveMemoryWarning时生成警报是个坏主意吗 如果没有,有没有比下面更好的方法 - (void)didReceiveMemoryWarning { [super didReceiveMemoryWarning]; // Release any cache

我见过一些应用程序在检测到内存不足时会发出警告。我尝试在我的应用程序中执行此操作,但遇到了问题。使用模拟器模拟内存警告,生成的警报会在我点击“ok”之前弹出两次,然后再弹出9次,直到最后消失

在调用didReceiveMemoryWarning时生成警报是个坏主意吗

如果没有,有没有比下面更好的方法

- (void)didReceiveMemoryWarning {

     [super didReceiveMemoryWarning];

     // Release any cached data, images, etc that aren't in use.
     ...

     UIAlertView *alert = [[UIAlertView alloc]
                          initWithTitle:@"Warning" 
                          message:@"Your device is low on memory..." 
                          delegate:nil 
                          cancelButtonTitle:@"OK" 
                          otherButtonTitles:nil];
    [alert show];
    [alert release];    
}
谢谢


菲尔

一般来说,你不应该通知用户内存不足。毕竟,他们能做什么?您的应用程序是前台应用程序,它(除了苹果应用程序)正在消耗设备的大部分内存。当用户看到内存消息时,他们将做什么


当您收到内存不足通知时,您应该只关注释放内存,而不需要用户交互。

据我所知,您很可能会在应用程序崩溃(或被杀死)之前收到此通知。如果你设法释放内存,应用程序可能会存活(但不能保证)

可能有一些合法的用例。因为这通常是崩溃的前奏,所以您可能需要警告用户这一点。这可能会以消息的形式出现,如:“您的设备内存不足。因此,此应用程序可能会意外退出。如果问题仍然存在,请尝试关闭并再次打开手机电源”。假设一切正常,这不应该出现-因此如果出现,您可能需要一些警告

这在越狱手机上可能更为常见,流行的“backgrounder”应用程序允许应用程序在后台运行(通常直到出现这种情况——在这种情况下,应用程序被强制退出——参见注释)


解决事件连续触发11次的问题。。您可以限制弹出窗口。例如:显示时,存储自历元以来的秒数。然后-在再次显示之前,检查是否经过了一定的时间。

获取内存警告是一个严重的问题,任何开发移动应用程序的开发人员都不能忽视这一点。在类的didReceiveMemoryWarning方法中,应该始终释放占用大部分内存的变量

向用户显示此应用程序正在消耗大量内存的警告是没有用的,因为这不关他们的事,他们可以做什么。相反,你应该关注如何在没有用户交互的情况下减少内存消耗

  • 当UI元素可见时分配它们。不要隐藏它们,而是从superView中删除它们,并在使用时重新分配它们
  • 内存压力低时清空所有缓存
  • 尽可能限制变量的范围。在控制器解除分配之前,类型为(Strong、retain、copy)的所有@属性都将保持活动状态
  • 使用静态分析仪查找潜在泄漏的位置
  • 使用可用仪器中的泄漏工具查找并清除泄漏。请参见《仪器用户指南》中的
  • 使用分配工具检查应用程序的哪个部分占用了大量内存
  • 如果你使用的是核心基础类?确保使用CFRelease手动释放每个分配
  • 确保不要一次创建过多的自动释放对象。如果您正在创建,则通过创建自己的自动释放池来缩小范围 通过使用声明式

  • 您描述的用例正是我试图实现的。我有一些越狱手机的用户写到我的应用程序崩溃了。如果可用内存是个问题,我想让他们知道。我按照您的建议,将警报从每个视图控制器中的didReceiveMemoryWarning移动到发生速率限制的应用程序代理中的常用方法,从而对警报进行速率限制。(我没有意识到我收到重复警报的原因是由于didReceiveMemoryWarning在所有视图控制器中同时触发,直到我做出更改。)谢谢!