我正在使用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];
答案 0 :(得分:3)
使用UIImagePickerController没有诀窍 - 它使用了一堆内存,你只需要忍受它。完成它后释放它就像它获得的效率一样高。
但这与图像选择器本身有关。问题的另一部分是你正在使用它返回给你的UIImage对象。根据iPhone的标准,这些都是大对象,而且你真的无法将其中的许多内容留在内存中。如果您正在显示图像,那就是生命,但是可以通过UIImageJPEGRepresentation()和NSData的writeToFile:原子地安全地将不在屏幕上的图像卸载到文件中:。
如果确实需要显示多张图像,请考虑将其缩小。相机的1600x1200已经比屏幕大得多,并且有多个屏幕上的图像,它甚至更加过分。缩放到较低分辨率可显着降低内存需求。用于执行此操作的示例代码并不难找到 - 例如,请参阅UIImagePickerController camera preview is portrait in landscape app。
答案 1 :(得分:2)
UIImagePickerController会泄漏内存,如here所示,使用7或8次后会导致应用崩溃。您需要在应用程序的生命周期中创建单例UIImagePickerController以避免此Apple缺陷。
答案 2 :(得分:0)
我知道这个答案是在事实之后,但我有同样类型的问题通过链接iPhone SDK 2.2及更高版本解决了它自己。