使用 UIImagePicker 一次后的内存警告

Posted

技术标签:

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

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

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

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

任何帮助表示赞赏。

【问题讨论】:

【参考方案1】:

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

【讨论】:

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

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

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

【讨论】:

对,所以如果我理解正确,我不需要在显示 UIImagePicker 时隐藏我的视图,因为视图控制器已经这样做了,并且我可以收到内存警告拍摄图像后..只要我没有做任何异国情调(例如显示全分辨率图像?) 如果您的应用程序使用“过多”内存,并且在收到内存不足警告时没有释放“足够”内存,则操作系统可能会终止该应用程序。据我所知,“足够”和“太多”没有确切的值。 从这个答案 (***.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 起来!

以上是关于使用 UIImagePicker 一次后的内存警告的主要内容,如果未能解决你的问题,请参考以下文章

笔记本win10系统,加了个内存条一开始挺正常,系统运行也很快,第二天重启一次后突然无法开机了,总

UIImagePicker 的内存问题

clickhouse 警告 - 希望它最终会作为合并的结果出现

每秒仅插入 1 次后的 403 速率限制

每秒仅插入 1 次后的 403 速率限制

jQuery $.post() 执行两次后的 php 代码