如何在内存警告viewDidUnload之后保留值

时间:2012-05-22 08:11:50

标签: iphone ios uiimagepickercontroller memo

好吧,我的问题是当我使用相机UIImagePicker并且手机内存不足时。它会抛出内存警告并卸载视图然后重新加载。

我知道这是一个非常普遍的问题,很多问题已经存在。我不打算这样做。

- (void)viewDidLoad
{
    [super viewDidLoad];

    MyPersonClass *persons = [[MyPersonClass alloc] init];   
    persons.images = [NSMutableDictionary dictionaryWithCapacity:4];
....
...
}    

我的问题是我的视图控制器有四个按钮和UIImageViews,当我点击每个按钮时,它们打开相机,点击的图像显示在UIImageViews中,这些图像也存储在persons.images NSMutable字典中。

enter image description here

有时会抛出流行的内存警告错误并卸载视图,这会删除UIImageView中的所有图像,这些图像是在内存警告之前拍摄的,我丢失了persons.iamges中的所有内容我只是想要检索这个数据回来了。我不知道在哪里存储它(我不想为此使用CoreData)谢谢 请帮忙

3 个答案:

答案 0 :(得分:1)

当调用 viewDidUnload 时,您可以维护用于存储图像的实例变量。在 viewDidUnload 中设置标记,然后存储Imageviews的所有图像。在 viewDidLoad 中,检查是否已调用 viewDidUnload ,然后将保存的图像分配给ImageView。

答案 1 :(得分:0)

您可以将MutableDictionary保存为沙箱应用程序中的plist,就像那样

[yourMutableDictionary writeToFile:pathToSave atomically:YES];

然后,通过这种方式获取您的NSMutableDictionary

NSMutableDictionary *containOfPlist = [NSMutableDictionary arrayWithContentsOfFile:pathToYourPlist];

希望这就是你想要的。

答案 2 :(得分:0)

请使用NSCache存储具有KeyValue对的图像。 在内存警告上将NSCache对象写入文件并在低内存警告回调时清除NScache对象中的所有对象。 再次加载应用程序从该文件中放出NSCAche。

所以我这样可以保存数据并可以使用它。

另一个备选方案是使用NSArchiver类来获取NSDictnaory并存储它。