"메모리 오류로 인해 종료 됨"을 디버깅 할 수 있습니까?


79

내 앱이 실행될 때 특정 (일관된) 지점에서 일관되게 xcode 오류 메시지가 나타납니다.

메모리 오류로 인해 종료되었습니다.

오류의 원인이되는 코드를 찾을 수 없지만 오류에 가까운 코드 (중단 점 사용)를 알 수 있습니다.

이 오류는 내 구현에서 특정 셀을 반환 한 직후에 발생합니다.

- (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath

UITableViewDataSource위임 방법. 유효한을 반환하고 있음을 확인할 수 UITableViewCell있지만 전체 방법을 설명하고 게시하는 것은 시간 낭비라고 생각합니다. 그러나 나는 그것이 빠르고 방대한 메모리 할당으로 인해 발생할 수 있다고 생각합니다.

Terminated due to memory error메모리 압력이 아니라 라고 분명히 말합니다 .

메시지가 실제로 무엇을 의미하는지 알고 싶습니다. 또한이 메시지를 디버깅하는 방법이 있습니까? 충돌 보고서가 생성되지 않습니다.

ARC 및 iOS 7을 사용 하고 있습니다.


1
Xcode에서 동일한 오류가 발생했습니다. 초고층 UIWebView (20000 픽셀 이상)를 만들었 기 때문에 내 앱이 충돌했습니다. 충돌 보고서를 찾을 수 없었고 충돌 전에 메모리 경고를받을 방법을 찾지 못했습니다.
Heath Borders

@HeathBorders UIWebview도 사용하고 있습니다. 매우 흥미 롭습니다. 나는 내 키를 확인해야 할 것입니다. 감사!
산타 클로스

이것은 이러한 구성 요소의 일반적인 오류입니다. 가능한 원인은 다음과 같습니다. 어떻게 든 너무 많은 셀을 생성하고 (계산 확인), 셀 크기가 잘못되었습니다 (0으로 나누면 크기를 만들 때 무한한 숫자 인 nan을 생성하는 것과 같이). 또는 무한 루프에서 발생합니다.
Pochi

@HeathBorders 이제 어떤 장치에서 테스트하고 있는지 알고 싶습니다.
Santa Claus

iPad3에서 테스트하고있었습니다. 또한 저의 UIWebView키는 초 고화질이 아니라 초광각 (30000px)이었습니다.
Heath Borders

답변:


56

이 오류가 발생하고 무엇이 잘못되었는지 이해할 수 없습니다.

몇 가지 검색 후 나는 좀비를 비활성화하는 것을 잊었다는 것을 알았습니다.

비활성화하려면 다음을 수행하십시오.

편집 구성 선택

"좀비 개체 활성화


5
좀비가 활성화되면 오브젝트가 할당 해제되지 않으므로 모든 것이 영향을받습니다. 이것은 많은 것이 할당되고 할당 해제되는 테이블 뷰의 경우 메모리를 매우 빠르게 채 웁니다. Enable Zombies의 정의 : 할당 해제 된 개체를 사용하려는 모든 시도를 가두는 "좀비"개체로 대체합니다. 좀비 개체에 메시지를 보내면 런타임이 오류를 기록하고 충돌합니다. 역 추적을 보면 좀비 감지기를 트리거 한 일련의 호출을 확인할 수 있습니다.
zirinisp

2
그래도 문제에 직면 해 있습니다. 나를 안내 해주세요.
저는 학습자입니다.

좀비를 어떻게 비활성화합니까?
Sam

12

나는 같은 문제에 직면했다 . ( "메모리 오류로 인해 종료 됨") 위의 모든 답변을 시도했지만 아무런 효과가 없습니다. 그런 다음 내 코드를 디버깅하고 for 루프가 매번 nil 값으로 배열에 메모리를 할당하여 무한 시간 동안 실행되고 있음을 발견했습니다 .300 + MB를 사용 하므로이 오류가 발생합니다.

감사.


U는 내 시간을 절약했습니다. 감사합니다.
Saikiran K

7

나는 똑같은 문제가 있었다. 내 프로그램에 메모리 누수가 발생하거나 너무 많은 메모리를 사용한다고 생각했습니다. 나는 악기를 사용하고 할당 프로파일과 프로그램이 잘 작동합니다. 또한 장치별로 프로그램을 충분히 오래 실행했으며 제대로 작동합니다.

나는 또한 디버깅을 위해 iPad 3rd Gen을 사용하는데, 장치 또는 버그가 느려서 원인이 될 수 있습니다 .Xcode와 Xcode 문제에서 실행되는 것처럼 보입니다. 메모리 누수 또는 할당 문제가 아닙니다.

기기 자체에서 앱을 실행하고 기기에서 작동하는지 확인하고


흠. 이 게시물에 참여한 모든 사람은 iPad 3 세대에서 테스트했습니다. 우연의 일치?
Santa Claus

저는 iPad 3 세대 만 사용하므로 아직 잘 모르겠습니다. 오늘 저는 아이 패드 미니 레티 나를 주문했습니다. 그래서 다음 주에 답할 수있을 것입니다.)
Tomohisa Takaoka 2013

iPhone5S에서 방금 만났습니다. 방금 Google의 추적 코드를 추가하고 arm64를 빌드 할 때 Google의 slooooww로 arm64에서 arm7 / 7s로 줄여야했습니다. 나는 이것이 arm64 / 7s 일이라고 생각했습니다. 확실히 iPad 3 세대 문제가 아닙니다. 별도의 검색이 너무 많이 다운로드하고 OOMing과 관련이있을 수 있음을 알려주는 '__connection_block_invoke_2 오류'가 있습니다. 스택 트레이스의 부족에 대한 수치하지만 ....
피터

iPad mini 2 세대 ( iPad4,4 )에서 발생합니다.
Slipp D. Thompson 2014-07-15

3
NSURLSession을 사용하여 전체 이미지를 다운로드 할 때 비슷한 문제가 있습니다. 시뮬레이터 및 독립형 장치 (iPhone 6)가 정상적으로 작동합니다. 악기에서 할당 다이어그램도 매끄럽게 보입니다. 충돌하지 마십시오. xCode에 장치를 연결하면 문제가 발생합니다. 빌드 구성 (디버그 또는 릴리스)에 관계없이. 항상 미스터리 "메모리 오류"로 끝납니다.
Neru

6

OCR에 Tesseract를 사용하고 있었는데 대상 텍스트가 스캔되었을 때 GIF가 재생되어야했습니다. GIF가 재생되기 시작했을 때 메모리가 70-80MB에서 450MB로 급증했습니다. 문제는 GIF가 너무 많은 메모리를 차지하고 앱이 충돌하고 Xcode가 해당 메시지를 표시한다는 것입니다. 그래서 ViewController의 superview에서 관련된 imageView를 제거했습니다.

imageView.removeFromSuperview

그 후에도 앱은 여전히 ​​450MB로 급증하지만 즉시 릴리스되고 40MB로 내려갑니다.


1
메모리 충돌을 해결하는 데 이틀을 보냈으며 솔루션이 도움이되었습니다. 감사..!
Aleesha

4

다시 시작 장치가 저에게 효과적이었습니다. "메모리 오류로 인해 종료되었습니다"메시지가 표시되지 않도록 중단되었습니다.


2

구성표를 편집하고 진단 아래에 할당을 보호하는 몇 가지 옵션이 있습니다. 자세한 내용은 설명서를 참조하십시오 .

질문은 "압력"이 아니라 "메모리 오류로 인해 종료 됨"이라고 표시됩니까? 앱의 메모리가 부족한 경우 계측기를 확인하고, 앱의 메모리가 부족한 것 같으면 정확한 메시지가 무엇인지에 관계없이 집중해야합니다.


1
확실히 "압력"이 아니라 "오류"라고되어 있습니다. 메모리 레벨은 충돌시 약 15MB입니다.
산타 클로스

그런 다음 malloc 진단을 활성화하여 시도하십시오. Btw 장치에서 테스트하고 있습니까?
LearnCocos2D 2013 년

1

Xcode 11.3 에서 비슷한 문제가 발생했습니다. 여기서 다시 시도 버튼을 누를 때마다 카메라가 호출됩니다. 이것이 여러 번 수행되면 충돌이 발생합니다.

이것은 우리가 Zombie 오브젝트를 비활성화했을 때 수정되었습니다. 다음은 단계입니다.

  1. 왼쪽 상단에있는 프로젝트 이름을 탭합니다. 프로젝트에있는 대상 목록이 표시됩니다.
  2. 구성표 편집을 누릅니다.

스크린 샷 -1

  1. Run 옵션-> Diagnostics-> Uncheck Zombie Objects를 선택하십시오.

스크린 샷 -2

이제 프로젝트를 실행하십시오. 잘 작동합니다.


0

Xcode 11에서는 내 프로젝트를 Debug모드로 시작했습니다 . 사용자에게 이미지 기록 / 편집 / 반환을하고 있는데에서 사용할 수있는 것이 아닙니다 Debug. Release모드 로 전환하면 모든 것이 순조롭게 진행되었습니다.


0

부주의로 인해 이런 종류의 문제에 직면했습니다.

나는 imageView를 subview로 추가하는 함수를 호출했습니다.

override func layoutSubviews() {
    super.layoutSubviews()
}

이로 인해 엄청난 메모리 사용량이 발생 했으므로 이런 종류의 일에주의하십시오!


0

내가 눈치 챈 것은 케이블을 통해 장치에서 앱을 실행하고 오랫동안 유휴 상태로두면 오류가 발생한다는 것입니다.

Apple은이 문제를 해결 하고 앱이 유휴 상태 인 것처럼 느껴지고 그냥 죽일 수도 있습니다.


당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.