内存警告后NSMutableArray清除

时间:2011-05-12 22:14:25

标签: iphone ios

我有一个程序将捕获的图像保存到NSMutableArray临时。通常情况下这很好,但是如果我有一堆其他应用程序正在运行并且我捕获了一个图像,我会得到一个内存警告,当发生这种情况时,NSMutableArray中的图像会丢失,然后才能保存它。有没有办法防止iOS清除此NSMutableArray,直到我完成它,即使发生内存错误?谢谢。

2 个答案:

答案 0 :(得分:4)

如果您使用控制器-(void) loadView-(void) viewDidLoad方法创建阵列,则会出现问题。

内存警告后,控制器可能会将view属性设置为nil,这将导致调用控制器的方法viewDidUnload。我想到目前为止这对你来说还不错。

问题是在调用viewDidUnload之后,如果有任何尝试访问控制器view属性(例如通过在解除模态后显示视图,或者通过弹出到控制器) ,loadViewviewDidLoad方法将再次被称为 ,如果您使用这两种方法中的任何一种设置数组,您将丢失以前的数据,因为您将再次设置数组

编辑:

这对于iOS 5+无效,因为viewDidUnload方法已弃用且永远不会在UIViewController生命周期中调用

http://developer.apple.com/library/ios/#documentation/uikit/reference/UIViewController_Class/DeprecationAppendix/AppendixADeprecatedAPI.html#//apple_ref/occ/instm/UIViewController/viewDidUnload

答案 1 :(得分:0)

调用方法:- (void)didReceiveMemoryWarning时,也会调用viewDidUnload方法。因此,将调用viewDidUnload方法中使用的任何代码。因此,如果在viewDidUnload方法中将NSMutableArray设置为nil,则数组将删除其所有对象,并设置为nil。

希望这能解释原因!