2012-01-30 21 views
0

我想弄清楚为什么当我的应用程序在UIImagePickerController有控制权的时候获取了didReceiveMemoryWarning时,picker(以及picker的委托)被设置为deallocated viewcontroller?当接收到didReceiveMemoryWarning时,UIImageViewController的代表为零

视图控制器一个调用

self.postImagePicker = [[UIImagePickerController alloc] init]; 
self.postImagePicker.delegate = self; 
self.postImagePicker.sourceType = UIImagePickerControllerSourceTypeSavedPhotosAlbum; 
self.postImagePicker.allowsEditing = YES; 
[self presentModalViewController:self.postImagePicker animated:YES]; 

接着,UIImageViewController显示和图像被选择。然后模拟内存警告。出现对话框的视图控制器会收到内存警告错误,并将选取器设置为0x0(这意味着委托现在也无效)。

我正在使用ARC。调用UIImageViewController的方式有什么改变,这样呈现它的视图不会被重载,从而导致指向UIImageViewController的指针变为无效?

回答

0

检查didReceiveMemoryWarning。你在那里有self.postImagePicker = nil;吗?检查上游视图控制器的didReceiveMemoryWarning方法。他们有没有参考这个视图控制器?否则,导航控制器可能会倾倒此视图控制器。 delegate是一个弱引用,所以如果没有其他东西,那么仅仅保留视图控制器是不够的。

0

我猜你nil'在一些其他视图控制器的viewDidUnload中编辑了你的视图控制器。没有理由让你的视图控制器被释放,除非它被明确地释放(或者你并没有首先保留strong引用)。