2013-11-21 4 views
4

iPhone에서 카메라를 사용할 때 Im에 메모리 경고가 표시됩니다. 또한 ARC를 사용합니다.UIImagePickerController를 사용할 때의 메모리 경고

사진을 찍고 카메라보기 컨트롤러에서 '사진 사용'버튼을 누르면 메모리 경고가 표시됩니다. 사진보기 버튼을 누르면 ImageView의 내용이 변경됩니다.

메모리 문제는 캡처 된 이미지가 전체 화면이고 ImageView가 250h 250w라는 사실 때문일 것으로 생각했습니다. 하지만 카메라로 찍은 이미지의 크기를 축소 한 다음 ImageView에 할당하려고했습니다. 그러나 여전히 100 x 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으로 업데이트 한 이래로 나는 아직도 thsi 문제에 직면 해 있습니다. –

+0

아니요. 좋은 해결책을 찾지 못했지만 도움이되었습니다. "이 속성을 사용하면 속성에 원시 이미지가 저장되지 않습니다. 원시 이미지는 대략 30MB의 메모리를 차지합니다. " 그래서'self.image = [info objectForKey : UIImagePickerControllerOriginalImage]; 대신'UIImage * image = [info objectForKey : UIImagePickerControllerOriginalImage];로 변경했습니다. 이렇게하면 이미지가 더 이상 사용되지 않을 때 이미지가 제거됩니다. 참고 : iPhone 4 시리즈 및 5에서이 새로운 방법을 테스트했습니다. 메모리 경고는 5가 아닌 4 시리즈에만 나타납니다. – DevC

+0

웹을 둘러 보면서 카메라 및 관련하여 많은 버그 보고서가 Apple에 제출되었습니다. IOS 7. 예를 들어, 불규칙하게 카메라를 실행하면 검정 미리보기가 제공됩니다. 이것은 iOS7에 연결되며, iPhone 4 시리즈는 5가 아닙니다. 이것은 아마 프로세서 성능의 차이 일 수 있습니다. 그러나 확실하지 않습니다.메모리 경고가 문제가되지 않도록 앱이 승인되었습니다. – DevC

답변

6

내가 좋은 해결책을 찾을 수 didnt는하지만, 원시 이미지가 메모리의 약 30메가바이트을 차지하기 때문에이 속성에 원시 이미지를 저장하지 않을 것입니다. 그래서 대신 :

UIImage * image = [info objectForKey:UIImagePickerControllerOriginalImage]; 

더 이상 사용하지 않을 경우 이미지가 파괴되지 않습니다이 방법을 :

self.image = [info objectForKey:UIImagePickerControllerOriginalImage]; 

나는 그것을 변경했습니다. 참고 : iPhone 4 시리즈 및 5에서이 새로운 방법을 테스트했습니다. 메모리 경고는 4 시리즈가 아닌 5에만 나타납니다.

웹을 둘러 보면서 많은 버그 리포트가 Apple에 제출되었습니다 카메라와 iOS7. 예를 들어, 불규칙하게 카메라를 실행하면 검정 미리보기가 제공됩니다. 이것은 iOS7에 연결되며, iPhone 4 시리즈는 5가 아닙니다. 이것은 아마 프로세서 성능의 차이 일 수 있습니다. 그러나 확실하지 않습니다.

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

} 

내가 "UIImagePickerController를"을 사용하여 한 클래스의 캐시 지우기, 나를 위해 일한! - 내 응용 프로그램은 메모리 경고가 문제가되지 않도록 앱 스토어 승인있어

관련 문제