【问题标题】:Delegate of UIImageViewController is nil when didReceiveMemoryWarning is received收到 didReceiveMemoryWarning 时 UIImageViewController 的委托为 nil
【发布时间】:2012-01-30 01:55:10
【问题描述】:

我试图弄清楚为什么当我的应用程序在 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 的指针变得无效?

【问题讨论】:

    标签: ios uiimagepickercontroller didreceivememorywarning


    【解决方案1】:

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

    【讨论】:

      【解决方案2】:

      我猜你nil'ed 你的视图控制器在其他一些视图控制器的viewDidUnload 中。您的视图控制器没有理由被释放,除非它被显式释放(或者您一开始没有保留对它的 strong 引用)。

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 2018-12-31
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2021-07-05
        • 1970-01-01
        • 2023-04-06
        相关资源
        最近更新 更多