我试图找出为什么当我的应用程序获得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的指针无效?
答案 0 :(得分:0)
检查didReceiveMemoryWarning
。你有self.postImagePicker = nil;
吗?检查上游视图控制器的didReceiveMemoryWarning
方法。他们是否有对此视图控制器的引用?如果不是,导航控制器可能正在转储该视图控制器。 delegate
是一个弱引用,所以如果没有别的东西,那么保持你的视图控制器是不够的。
答案 1 :(得分:0)
我猜你在一些其他视图控制器nil
中viewDidUnload
编辑了你的视图控制器。您的视图控制器没有理由被释放,除非它被明确释放(或者您没有首先保留strong
引用它。)