1

메모리가 부족한 경우를 대비하여 더 적은 메모리가 필요한 로직을 실행하기 위해 iPhone의 메모리 부족 오류를 처리하고 싶습니다.iPhone에서 메모리 부족 오류 처리하기

UIImage* image; 
try { 
    image = [UIImage imageNamed:@"high_quality_image.png"]; 
} catch (OutOfMemoryException e) { 
    image = [UIImage imageNamed:@"low_quality_image.jpg"]; 
} 

먼저 내가 고품질의 이미지를로드하려고 시도하고, 그 일을하는 동안 메모리가 부족 있다면, 내가 사용 : 특히, 나는 다음과 같은 의사 코드와 매우 유사 뭔가를하고 싶습니다 저품질 이미지.

이것이 가능할까요? 메모리 부족 오류가 발생했을 때 처리 할 수있는 것보다 예외 또는 알림이 있습니까?

메모리 부족 경고는받은대로 전에 전에 메모리가 부족합니다. 메모리 부족 오류로 인해 실행중인 논리가 실패했는지 여부를 알고 싶습니다. 이에 따라 적절하게 처리하십시오.

또는이 같은도 도움이 될 수 :

UIImage* image; 
if (enoughMemory) { 
    image = [UIImage imageNamed:@"high_quality_image.png"]; 
} else { 
    image = [UIImage imageNamed:@"low_quality_image.jpg"]; 
} 

답변

3

여기에 앱에서 사용하는 현재 메모리가 표시되며 해당 정보를 바탕으로 수행 할 작업을 결정할 수 있습니다.

iphone memory usuage

+0

감사합니다 Joo. 얼마나 많은 기억이 남았는지 알 수 있습니까? – hpique

+0

해당 코드에서 가져온 번호를 가져 와서 24MB에서 뺍니다. 24 메가 바이트는 애플이 실행하는 앱마다 허용하는 최대 값이라고 생각합니다. –

+0

그런 값을 가진 상수가 있습니까? 아이포드 터치, 아이폰, 아이 패드와 같은 세대는 거의 동일하지 않다. – hpique

0

아이폰은 특정 메모리 임계 값에 도달 할 때 트리거되는 메모리 부족 경고가 있습니다. 이 콜백은 응용 프로그램에 발행되므로 적절하게 응답해야합니다. 그렇지 않으면 응용 프로그램이 OS에 의해 선점 될 위험이 있습니다. 그때, 당신의 어플리케이션이 높은 메모리 이미지를 더 낮은 메모리 이미지로 변환하는 것이 좋을 것입니다.

디스크의 파일 크기가 장치에서 사용하기 위해로드되고 준비되면 얼마나 많은 메모리를 소비하는지 나타내는 것은 아닙니다.

낮은 메모리 경고 처리에 대한 자세한 내용은 here을 참조하십시오.

+0

답장을 보내 주셔서 감사합니다. 그것은 약간 다를 것입니다. 저 메모리 경고는 전화가 메모리를 소모하기 전에 호출되며 필요할 경우 메모리를 해제 할 수 있습니다. 이 경우 메모리가 부족하여 실행중인 논리가 실패했는지 알고 싶습니다. – hpique

+0

당신이 권장하는 방식으로 장치를 메모리 한도로 밀어 넣으려고 했습니까? 나는 그것이 당신이 찾고있는 행동을 취하기 위해 취해야 할 조치들을 지시 할 것이라고 생각합니다. – fbrereto

+0

예, 앱이 종료됩니다. – hpique

0

편집 : 귀하의 질문에 대한 답변이 아니 었습니다.


이미지로 무엇을하려고합니까? 이미지 선택 컨트롤러에서 반환 된 전체 크기 이미지를 저장하는 것과 같은 일부 작업은 특히 많은 메모리 사용자가 수행합니다.

난 항상 당신이 가장 작은 크기 항상 이미지를 필요로 가정되는 일을 추천 할 것입니다 무엇 :

  1. 나중에 고해상도 이미지가 필요하면 디스크에 캐시를.
  2. 표시 할 이미지는 모두 최소한의 해상도 여야합니다.
  3. 고해상도 이미지가 필요할 때 캐시에서 다시 당깁니다.
  4. 메모리 부족 경고를 사용하여 메모리에 있지만 보이지 않는 이미지를 해제하십시오.

이제 이러한 상황이 발생할 수 있습니다. iPhone에서 큰 이미지를 읽고 디스크에 쓰는 속도가 느립니다. 그렇다면 @ fbrereto의 제안을 따르십시오. 큰 이미지를로드하고 메모리 경고를주의 깊게 살펴보고, 그 중 하나를 얻으면 드롭하고 작은 이미지를로드하십시오.

메모리 경고를 무시해서는 안되지만, 메모리 경고에 응답하지 않아도 앱이 다운되지는 않습니다.내 iPhone 3G는 거의 UIImagePickerController에서 이미지를 가져올 때마다 메모리 경고를 받게 될 것이고, 내가 할 수있는 일은 아무것도 없다.

+0

나는 메모리 경고를 무시하지 않을거야. 나는 그것을 얻을 때 항상 자원을 공개한다. 그러나 어쨌든 나는 때때로 추억을 남기지 만, 나는 그 사건도 다루고 싶다. – hpique