2013-11-21 95 views
4

當我在iPhone上使用相機時,出現內存警告。我也使用ARC。使用UIImagePickerController時的內存警告

當你拍一張照片,然後按「使用照片」攝像機視圖控制器我得到一個內存警告按鈕。意圖是一旦按下「使用照片」按鈕,它就會更改ImageView的內容。

我以爲內存問題可能是由於這樣的事實,即拍攝的圖像充滿屏幕,並且ImageView的是250H250瓦特但我試圖縮小相機拍攝的圖像的大小,然後將其分配給ImageView。然而,這仍然沒有工作,甚至當我把它調整到100×100

其次,我再沒有分配由攝影機拍攝到的ImageView的照片,但它仍然有內存警告。

我看了這裏的其他答案,並嘗試上述兩個,但它仍然存在。我將在下面顯示我的代碼。這會影響我向應用商店的提交嗎?當然,如果這是一個常見的事件,它是一個錯誤或有解決方法?如果可以查看提供的代碼並發現錯誤或者建議如何處理這種內存警告,那將會很棒。

我的應用程序是95 +%完成除此之外內存警告,因此正逐漸接近提交時間。

我的代碼:

- (IBAction)takePhoto:(id)sender { 

self.imagePicker = [[UIImagePickerController alloc] init]; 
self.imagePicker.delegate = self; 
self.imagePicker.allowsEditing=NO; 

if ([UIImagePickerController isSourceTypeAvailable:UIImagePickerControllerSourceTypeCamera]) { 
    [self.imagePicker setSourceType:UIImagePickerControllerSourceTypeCamera]; 
    [self presentViewController:self.imagePicker animated:YES completion:NULL]; 

} 
else{ 
    [self.imagePicker setSourceType:UIImagePickerControllerSourceTypePhotoLibrary]; 
    [self presentViewController:self.imagePicker animated:YES completion:NULL]; 
} 



} 

- (IBAction)choosePhoto:(id)sender { 
self.imagePicker2 = [[UIImagePickerController alloc] init]; 
self.imagePicker2.delegate = self; 
self.imagePicker2.allowsEditing=NO; 
[self.imagePicker2 setSourceType:UIImagePickerControllerSourceTypePhotoLibrary]; 
[self presentViewController:self.imagePicker2 animated:YES completion:NULL]; 
} 

-(void) imagePickerController:(UIImagePickerController *)picker didFinishPickingMediaWithInfo:(NSDictionary *)info{ 

self.image = [info objectForKey:UIImagePickerControllerOriginalImage]; 
CGRect rect = CGRectMake(0,0,100,100); 

UIGraphicsBeginImageContext(rect.size); 
[self.image drawInRect:rect]; 
UIImage *picture1 = UIGraphicsGetImageFromCurrentImageContext(); 
UIGraphicsEndImageContext(); 
[self.snapImage setImage:picture1]; 

[self.uploadImageBtn setHidden:NO]; 
[self dismissViewControllerAnimated:YES completion:NULL]; 
} 

-(void)imagePickerControllerDidCancel:(UIImagePickerController *)picker{ 

[self dismissViewControllerAnimated:YES completion:NULL]; 
} 
+0

你是否發現了這個問題的解決方案,自從我更新到iOS 7後,我仍然面臨這個問題。 –

+0

不是我沒有找到一個好的解決方案,但這有助於:「我不會將原始圖像存儲在屬性中,因爲原始圖像佔用大約30MB的內存。「因此,而不是'self.image = [信息objectForKey:UIImagePickerControllerOriginalImage];'我改變了'UIImage * image = [信息objectForKey:UIImagePickerControllerOriginalImage];'。這樣,圖像在不再使用時會被銷燬。注意:我已經在iPhone 4系列和5上測試了這種新方法。內存警告只出現在4系列而不是5上。 – DevC

+0

從環視網站看,有許多關於相機提交給蘋果公司的錯誤報告, IOS 7。例如,當你啓動攝像機時,會不定期地發出黑色預覽 - 這與iOS7相關,更多的是iPhone 4系列不支持5.這可能是處理器能力的差異 - 但我不確定。我的應用程序已獲批准用於應用程序商店,因此內存警告不會成爲問題 – DevC

回答

6

我沒有找到一個很好的解決方案,但由於原始圖像佔用的內存大約30MB我不會原始圖像存儲在一個屬性。因此,而不是:

self.image = [info objectForKey:UIImagePickerControllerOriginalImage]; 

我把它改爲:

UIImage * image = [info objectForKey:UIImagePickerControllerOriginalImage]; 

這樣,當它不再使用的圖像被破壞。注:我測試的iPhone 4系列和5只記憶警告出現在4系列不是5

從尋找各地的網絡這種新方法已經出現了關於提交給蘋果公司的許多錯誤報告相機和iOS7。例如,當你啓動攝像機時,會不定期地發出黑色預覽 - 這與iOS7相關,更多的是iPhone 4系列不支持5.這可能是處理器能力的差異 - 但我不確定。我的應用程序得到批准的應用程序商店所以內存警告將不再是一個問題 -

2
- (void)didReceiveMemoryWarning 
{ 
    [super didReceiveMemoryWarning]; 
    // Dispose of any resources that can be recreated. 
    [[NSURLCache sharedURLCache] removeAllCachedResponses]; 

} 

清除高速緩存中的類我所用的「的UIImagePickerController」,爲我工作!

相關問題