Iphone中的Memory Warning释放从iPhone中数据库检索的所有值

问题描述

|| 我有一个基于导航的iPhone应用程序。在应用程序中间,有时我会收到内存警告级别1和2。突然之间,我从数据库中获取并基于根Viewcontroller中用户输入创建的所有值(包括我保存在nsuserdefaults中的值)完全丢失了。当我尝试返回到根视图控制器时,我的表视图为空,没有任何数据。 如何处理此问题,请提出任何解决方案?     

解决方法

这就是它的工作方式,“很不幸”。当“ 0”进入时,您的视图被释放,这解释了为什么您在表中找不到任何值。 根据Apple Docs的说法,应该准备再次创建所有视图。   此方法的默认实现检查视图控制器是否可以安全地释放其视图。如果视图本身没有超级视图,并且可以从nib文件或使用自定义loadView方法重新加载视图,则可以这样做。如果可以释放视图,则此方法将释放它并调用viewDidUnload方法。      您可以根据需要重写此方法,以释放视图控制器使用的任何其他内存。如果这样做,请确保在某个时候调用super实现,以允许视图控制器释放其视图。在iOS 3.0及更高版本中,如果视图控制器持有对视图层次结构中对象的引用,则应改为在viewDidUnload方法中释放这些引用。在iOS的早期版本中,您应继续通过此方法释放它们。有关如何安全释放插座和其他对象的信息,请参见viewDidUnload方法中的讨论。 如果要实施这些准则,则可以采取以下方法: 使用
viewDidLoad
/
viewDidUnload
来“保存/恢复”您的数据; 将数据存储在独立于您的视图的模型中; 在
viewDidUnload
中(警告后调用),在控制器中存储有关视图状态的足够信息(即,如果它正在显示有关客户及其客户/ ID的数据),那么您可以通过从以下位置获取数据来重新创建该信息该模型; 在
viewDidLoad
中,当在出现内存警告后恢复视图时也调用该视图,请使用您保存在视图控制器中的信息(如果有的话),以精确的状态重新创建视图(否则,将其放入默认状态)。 这应该很容易。 如果对您有意义,则可以部署的一个技巧是: 在视图控制器中覆盖
-didReceiveMemoryWarning
; 对于确实不想自动释放的任何视图,请不要在
-didReceiveMemoryWarning
覆盖中调用
[super didReceiveMemoryWarning]
。 当心,这将使您现在的生活更轻松,但也将破坏苹果公司为恢复内存而采用的重要机制。这本身不会导致崩溃,但是如果您管理许多视图或视图占用大量内存(大量图形等),则可能会使设备内存填满并突然关闭应用程序。所以,您的判断在这里...     

相关问答

依赖报错 idea导入项目后依赖报错,解决方案:https://blog....
错误1:代码生成器依赖和mybatis依赖冲突 启动项目时报错如下...
错误1:gradle项目控制台输出为乱码 # 解决方案:https://bl...
错误还原:在查询的过程中,传入的workType为0时,该条件不起...
报错如下,gcc版本太低 ^ server.c:5346:31: 错误:‘struct...