收到didReceiveMemoryWarning时,UIImageViewController的委托为nil

时间:2012-01-30 01:55:11

标签: ios uiimagepickercontroller didreceivememorywarning

我试图找出为什么当我的应用程序获得didReceiveMemoryWarning而UIImagePickerController具有控制权时,选择器(以及选择器的委托)被设置为解除分配的viewcontroller?

View Controller one call

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的指针无效?

2 个答案:

答案 0 :(得分:0)

检查didReceiveMemoryWarning。你有self.postImagePicker = nil;吗?检查上游视图控制器的didReceiveMemoryWarning方法。他们是否有对此视图控制器的引用?如果不是,导航控制器可能正在转储该视图控制器。 delegate是一个弱引用,所以如果没有别的东西,那么保持你的视图控制器是不够的。

答案 1 :(得分:0)

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