2009-02-19 74 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和更高版本來解決它自己。