【问题标题】:UIImagePickerControllerSourceTypeCamera hogging up memoryUIImagePickerControllerSourceTypeCamera 占用内存
【发布时间】:2009-02-19 15:37:24
【问题描述】:

我使用 UIImagePickerController 是为了让用户通过拍摄新照片或从图库中选择图像来选择我的应用程序中的图像。使用图库,该应用程序运行良好。但是如果我使用相机作为来源,应用程序会占用大量内存并最终在变得非常缓慢后被杀死。

谁能告诉我使用 UIImagePickerControllerSourceTypeCamera 的最佳方式。

这是我正在使用的代码

if(![UIImagePickerController isSourceTypeAvailable:UIImagePickerControllerSourceTypeCamera])
    return;
picker = [[UIImagePickerController alloc] init];
picker.sourceType = UIImagePickerControllerSourceTypeCamera;
picker.delegate = self;
[[self navigationController] presentModalViewController:picker animated:YES];
[picker release];

【问题讨论】:

    标签: iphone


    【解决方案1】:

    使用 UIImagePickerController 没有任何技巧——它使用大量内存,而您只需要忍受它。完成后释放它是最有效的。

    不过,这与图像选择器本身有关。问题的另一部分是你对它返回给你的 UIImage 对象做了什么。按照 iPhone 的标准,这些都是大对象,你真的无法将其中的许多保存在内存中。如果您正在显示图像,那就是生活,但是不在屏幕上的图像可以通过 UIImageJPEGRepresentation() 和 NSData 的 writeToFile:atomically: 安全地卸载到文件中。

    如果您确实需要显示多张图片,请考虑缩小它们。相机的 1600x1200 已经比屏幕大了很多,而且在屏幕上有多个图像时,它就更加过分了。缩放到较低的分辨率会显着降低内存需求。执行此操作的示例代码不难找到——例如,参见 UIImagePickerController camera preview is portrait in landscape app

    【讨论】:

      【解决方案2】:

      UIImagePickerController 泄漏内存,如 here 所述,并且在 7 或 8 次使用后会导致您的应用崩溃。您需要在应用程序的整个生命周期中创建一个单例 UIImagePickerController 以避免这个 Apple 缺陷。

      【讨论】:

      • 那篇博文已有几个月的历史,我无法在最新的 iPhone 操作系统中重现该错误。如果您的目标是 2.2,那么这个问题不应该让您担心。如果您的目标是
      【解决方案3】:

      我知道这个答案是事后的,但我遇到了相同类型的问题,通过链接 iPhone SDK 2.2 及更高版本解决了问题。

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2012-03-30
        • 2011-05-03
        • 2010-09-18
        • 2013-01-22
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多