2012-05-09 3 views
2

최근에 iOS 프로젝트를 ARC로 변환했습니다. 내 프로젝트에는 두 개의 타겟이 있습니다. 하나는 응용 프로그램 자체이고 다른 하나는 GHUnit 테스트 세트입니다. Core Data 객체를 만들고 수정하는 데 많은 작업을 수행하는 약 200 개의 테스트가 있습니다. 테스트에서 사용하는 핵심 데이터 저장소는 메모리 저장소에 있으며 테스트가 끝나면 버려집니다 (즉, 어디에도 유지되지 않음).GHUnit이 iOS 프로젝트에서 ARC로 변환 한 후 allocate_pages() 오류를 발생했습니다.

내 테스트가 실행 중일 때 (오류가 발생하기 전에 정확히 같은 지점에 도달하지는 않지만 항상 같은 테스트 주위에 있습니다) 응용 프로그램이 EXC_BAD_ACCESS (코드 = 2, 주소 = ..)로 충돌합니다. .)

다음 콘솔에 출력 될 때 : Console Output

나는 지시 here in this answer을 따라하고 -fno-objc-arc 컴파일러 플래그를 사용하는 GHUnit 대상의 내 main.m 파일을 설정하지만 아무튼했습니다 도움이 된 것 같지 않습니다.

나는이 오류의 의미를 실제로 이해하지 못하고 그들을 검색하는 것이 도움이되지 않는 것 같습니다. 내 유일한 추측은 내가 추리하고 있지만, 왜 또는 어떻게, ARC가 나를 위해 물체를 공개해야한다고 생각하는지 모르겠다.

누구든지이 문제를 해결할 수있는 도움을 주시면 감사하겠습니다. 궁금한 점이 있으면 저에게 의견을 남겨주세요.

감사합니다. 당신은 메모리 소모 문제가있는 것처럼

먼저

답변

1

크리스, 당신은 악기 할당 도구에서 실행하여 테스트를 봐야한다. VM 자동 스냅 샷을 켜야합니다. 그런 다음 테스트가 실행될 때 힙을 여러 번 표시해야합니다.

둘째, 이것이 ARC와 관련이있을 수 있지만, 그렇지 않을 수도 있습니다. 일반적으로 ARC 앱은 자동으로 개체를 더 빨리 릴리스 할 수 있기 때문에 MRR 앱보다 공간이 적습니다. 다른 옵션을 가진 새로운 컴파일러로 옮겨 가면 기존의 문제가 발견 될 수 있습니다.

셋째, 메모리 내장 데이터베이스를 사용하기 때문에 첫 번째 테스트는 SQLite DB로 변경하는 것입니다. 그것은 훨씬 작은 설치 공간을 가질 수 있습니다. (나중에 메모리 내 DB로 돌아갈 수도 있지만, 메모리 부족의 원인을 찾으려고 노력하고 있습니다. 메모리 내 DB는 많은 RAM을 사용할 수 있습니다. 따라서 방정식을 벗어날 수 있습니다.

당신이 1 일 이상 3 작업을 완료 한 후에는

의에서 나는 이유를 조사하기 위해 악기를 사용했다. 당신은 메모리 부족에 대한 옳았다!

앤드류에게.

+0

감사 결과를 다시보고, 그리고하십시오 - 메모리 데이터베이스가 너무 커지고 있습니다. 메모리 내 데이터베이스를 유지했지만 이제 tearDownClass 메서드에서 managedObjectContext를 nil로 설정했습니다. –

관련 문제