【问题标题】:Memory warning after using the UIImagePicker once使用 UIImagePicker 一次后的内存警告
【发布时间】:2010-12-22 11:47:41
【问题描述】:

我参考了这个非常好的参考:https://stackoverflow.com/questions/1282830/uiimagepickercontroller-uiimage-memory-and-more,但我遇到了一些非常严重的问题。拍照后,我会收到内存警告。这是我拍的第一张照片,不是第二张或第三张。

我想知道是不是因为我已经从应用程序目录加载了几个小 jpeg 到滚动视图中。我能想到的唯一解决方案是在 UIImagePicker 处于活动状态时卸载主视图中的所有内容,然后再次重新加载所有内容,但我不确定这是正确的解决方案,也不知道该怎么做。

UIImagePicker 是否使用了 很多内存?我什至还没有处理或显示它所需要的图像。即使我将图像丢弃,我也会收到内存警告。

任何帮助表示赞赏。

【问题讨论】:

    标签: iphone memory camera uiimagepickercontroller


    【解决方案1】:

    您很可能使用的是未经编辑的图像,它们以 1400x1300 的完整尺寸返回,这非常大,会导致您的应用程序崩溃,我建议将图片大小调整为 iphone 原生 320x480 分辨率,应该可以解决您的问题

    【讨论】:

    • 您好,我显示的图像远小于此,并且我在相机拍照后和调整图像大小之前收到内存警告,所以我没有确定这是问题所在。
    • 是的,听起来您可能在此处某处存在其他内存泄漏
    • 所以你拍照,甚至在你可以选择它之前就崩溃了?
    • 是的,我在按“使用”之前收到警告,并且选择器已隐藏。
    • 我在选择器一显示就收到消息,甚至在拍照之前。
    【解决方案2】:

    是的,会发生这种情况。要记住的是,收到内存警告是可以的,这并不意味着你是一个坏人,你只需要确保你的应用程序不会崩溃或对内存警告感到困惑。

    特别是,您需要了解 UIViewController 的默认操作是在视图不可见时将其卸载,并且在全屏图像选择器显示时它们将不可见。

    【讨论】:

    • 对,所以如果我理解正确,我不需要在显示 UIImagePicker 时隐藏我的视图,因为视图控制器已经这样做了,并且我可以收到内存警告拍摄图像后..只要我没有做任何异国情调(例如显示全分辨率图像?)
    • 如果您的应用程序使用“过多”内存,并且在收到内存不足警告时没有释放“足够”内存,则操作系统可能会终止该应用程序。据我所知,“足够”和“太多”没有确切的值。
    • 从这个答案 (stackoverflow.com/questions/457568/…) 看来,您在大约 22MB 的使用量时会收到警告。虽然苹果尚未正式确认。
    • 那么解决这个问题的方法是什么?有没有办法防止呈现模态 UIImagePickerController 的 ViewController 自行卸载?
    • ViewController 不会被卸载,只会卸载它的视图。
    【解决方案3】:

    对于所有仍在寻找实际答案而不是模糊陈述的人,请看这里。我注意到有数百个答案,例如“处理你的记忆”,但这并没有回答任何问题。希望这可以帮助其他人......

    更改以下内容

    - (void)imagePickerController:(UIImagePickerController *)picker didFinishPickingMediaWithInfo:(NSDictionary *)info
    {
        UIImage *image = [info objectForKey:UIImagePickerControllerOriginalImage];
        [imageView setImage:image];
        [self dismissModalViewControllerAnimated:YES];
    }
    

    到以下内容,以便您的模态视图在设置图像之前关闭...

    - (void)imagePickerController:(UIImagePickerController *)picker didFinishPickingMediaWithInfo:(NSDictionary *)info
    {
        UIImage *image = [info objectForKey:UIImagePickerControllerOriginalImage];
        [self dismissModalViewControllerAnimated:YES];
        [imageView setImage:image];
    }
    

    【讨论】:

    • 这真是个好主意。当我调试时,我得到了正确的图像,但我的 imageView 缺少它。但是早点放弃模态视图,就像魅力一样。谢谢! 1 起来!
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2013-12-05
    • 2012-08-30
    • 2012-09-15
    • 1970-01-01
    • 1970-01-01
    • 2011-04-15
    • 2012-12-10
    相关资源
    最近更新 更多