2009-02-19 98 views
5

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

有人可以告诉我使用UIImagePickerControllerSourceTypeCamera的最佳方式。

这是我使用

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

回答

2

的泄漏的UIImagePickerController内存中的代码,指出here后7层或8的用途使您的应用程序崩溃。您需要在应用程序的生命周期中创建一个单例UIImagePickerController,以避免此Apple缺陷。

+1

该博客文章已有几个月的历史了,我无法在最新的iPhone OS中重现该错误。如果你的目标是2.2,那么这个问题不应该关注你。如果您的目标<2.2,请牢记它。 – 2009-02-19 22:54:30

3

使用UIImagePickerController没有任何窍门 - 它使用一堆内存,你只需要忍受这一点。当你完成它时释放它就像它获得的那样高效。

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

如果您确实需要显示多个图像,请考虑缩小它们。相机的1600x1200已经比屏幕大得多,而且屏幕上有多个图像,甚至更加过度。缩放到较低的分辨率可显着降低内存需求。这样做的示例代码不难找到 - 例如,参见UIImagePickerController camera preview is portrait in landscape app

0

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