2013-05-11 3 views
0

내 앱이 누출되는 곳을 파악하는 데 어려움이 있습니다. 나는 힙샷 (heapshots)과 함께 할당에 의한 "Instruments"프로파일 링 어플리케이션으로 테스트 해 보았습니다. 이것은 내가 가진 것입니다 : 당신이 볼 수 있듯이, 할당이 증가하고있다iOS 애플리케이션의 메모리 누수 - ARC

enter image description here

. 페이드 효과를 사용하여 두보기 사이를 전환 할 때마다 증가합니다. 다음 힙샷 중 어떤 것을 찾아야합니까? 힙샷/힙샷을 통과 할 때 누출을 발견하고 어떤 종류의 오브젝트를 돌봐야합니까?

미리 감사드립니다. :)

+0

stacktrace에서 해당 항목을 할당하는 위치를 확인하십시오. –

+0

ARC :) .... 나는 그것을 시도 할 것이다. 그것은 서로 다른 힙샷 후에 할당 된 바이트가 0 바이트가되어야한다는 것이 적절한가? :) 고맙습니다 :). – 7c9d6b001a87e497d6b96fbd4c6fdf

+0

시뮬레이터 나 장치에서 코드를 테스트하고 있습니까? 내 경험으로 인해 메모리 누수에 관한 도구의 결과는 정확하지는 않지만 실제 장치에서는 결과가 정확합니다. – danypata

답변

4

ARC는 더 이상 참조를 유지하지 않을 경우에만 메모리 할당을 해제 할 수 있습니다. 누출 기기가 "실제"누출을 나타내지 않으므로 (더 이상 액세스 할 수없는 메모리라는 의미에서), 아마도 메모리가 버려진 경우가있을 것입니다. 더 이상 필요하지 않은 객체에 대한 참조가 아직 보유되어 있으므로 할당이 해제되지 않습니다.

기준선 이후에 검사하는 스냅 샷은 실제로 중요하지 않습니다. 스냅 샷에있는 객체 목록은 다소 압도적 일 수 있지만 흔히 자신의 클래스로 필터링하는 것이 좋습니다. 오른쪽 상단의 검색 필드에 클래스 접두어를 입력하여이 작업을 수행 할 수 있습니다. 스냅 샷에 어떤 클래스도 나타나지 않으면 최소한 직접 사용하는 클래스를 찾으십시오.

또한 할당 계기의 인스펙터 창에서 "참조 횟수 기록"옵션을 활성화해야합니다. 이 기능을 사용하면 스냅 샷에 나열된 객체 (클래스 이름이 아니라 객체의 메모리 주소로 표시됨) 옆에있는 작은 오른쪽 화살표를 클릭하고이 객체의 전체 기록을 볼 수 있습니다. 이렇게하면 누구에게 참조가 있는지 쉽게 알 수 있습니다.

희망이 도움이됩니다.

0

'분석'옵션을 사용하여 코드를 작성하십시오. 추적하고 모든 문제를 제거하십시오.

+0

나는 그것을 시도했지만 어떤 "오류"도 발생하지 않습니다. 답변 주셔서 감사합니다:) – 7c9d6b001a87e497d6b96fbd4c6fdf