我有一个程序将捕获的图像保存到NSMutableArray临时。通常情况下这很好,但是如果我有一堆其他应用程序正在运行并且我捕获了一个图像,我会得到一个内存警告,当发生这种情况时,NSMutableArray中的图像会丢失,然后才能保存它。有没有办法防止iOS清除此NSMutableArray,直到我完成它,即使发生内存错误?谢谢。
答案 0 :(得分:4)
如果您使用控制器-(void) loadView
或-(void) viewDidLoad
方法创建阵列,则会出现问题。
内存警告后,控制器可能会将view
属性设置为nil
,这将导致调用控制器的方法viewDidUnload
。我想到目前为止这对你来说还不错。
问题是在调用viewDidUnload
之后,如果有任何尝试访问控制器view
属性(例如通过在解除模态后显示视图,或者通过弹出到控制器) ,loadView
和viewDidLoad
方法将再次被称为 ,如果您使用这两种方法中的任何一种设置数组,您将丢失以前的数据,因为您将再次设置数组
编辑:
这对于iOS 5+无效,因为viewDidUnload
方法已弃用且永远不会在UIViewController
生命周期中调用
答案 1 :(得分:0)
调用方法:- (void)didReceiveMemoryWarning
时,也会调用viewDidUnload方法。因此,将调用viewDidUnload方法中使用的任何代码。因此,如果在viewDidUnload方法中将NSMutableArray设置为nil,则数组将删除其所有对象,并设置为nil。
希望这能解释原因!