0

我试图弄清楚为什么当我的应用程序在 UIImagePickerController 具有控制权的情况下获得 didReceiveMemoryWarning 时,选择器(以及选择器的委托)被设置为已释放的视图控制器?

视图控制器一次调用

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

4

2 回答 2

0

检查didReceiveMemoryWarning。你self.postImagePicker = nil;有吗?检查didReceiveMemoryWarning上游视图控制器的方法。他们有这个视图控制器的引用吗?如果没有,导航控制器可能正在转储此视图控制器。delegate是一个弱引用,因此如果没有其他内容,仅保留您的视图控制器是不够的。

于 2012-01-30T02:53:17.753 回答
0

我猜你nil在其他一些视图控制器中编辑了你的视图控制器viewDidUnload。除非明确释放(或者您一开始没有保留strong对它的引用),否则没有理由释放您的视图控制器。

于 2012-01-30T03:00:08.897 回答