繁体   English   中英

UIImagePickerControllerSourceTypeCamera占用内存

[英]UIImagePickerControllerSourceTypeCamera hogging up memory

我正在使用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];

使用UIImagePickerController没有任何技巧 - 它使用了一堆内存,你只需要忍受它。 完成后释放它就像它获得的效率一样高效。

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

如果确实需要显示多个图像,请考虑将其缩小。 相机的1600x1200已经比屏幕大得多,并且有多个屏幕上的图像,它甚至更加过分。 缩放到较低分辨率可显着降低内存需求。 执行此操作的示例代码并不难找到 - 例如,请参阅UIImagePickerController相机预览是横向应用程序中的纵向

该泄漏的UIImagePickerController记忆,注意这里和后7层或8的用途使您的应用程序崩溃。 您需要在应用程序的生命周期中创建单独的UIImagePickerController以避免此Apple缺陷。

我知道这个答案是在事实之后,但我有同样类型的问题通过链接iPhone SDK 2.2和更高版本解决了它自己。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM