6

계측기 도구 (누수)가 실행 중이며 QuartzCore 라이브러리에서 메모리 누수가 발생했으며 코드가 어디에 발생하는지 정확히 알지 못합니다. 보통 나는 누수가 발생하는 곳을 가리킬 수 있지만 계측기 도구는 이러한 유형의 정보를 볼 수있는 곳을 제공하지 않습니다.iPhone/Objective-C - QuartzCore 라이브러리에서 메모리 누수가 발생했습니다.

누출을 진단하는 측면에서 볼 수있는 다른 사항은 무엇입니까?

enter image description here

답변

3

먼저

enter image description here는 장치에서이 작업을 실행 해보십시오. 때때로 시뮬레이터는 장치에없는 누출을보고합니다.

두 번째로 스택 추적 (오른쪽 사이드 바)을 열고이 호출을 트리거 할 때 어떤 코드가 더 높은 수준에 속하는지 확인한 다음 그 코드가 누출되는 이유를 생각할 수 있습니다.

추가 조언이 하나 있습니다. 그곳에 누수가있는 대신 ObjectAlloc으로 전환하고 힙 샷 기능을 사용하십시오. 누출 위치를 알고있는 경우 힙샷을 사용하여 기본 메모리 측정을 설정하고 그 후에 "힙샷"버튼을 누를 때마다 당신이 설정 한 기준선에 대해 일종의 "diff"메모리를보십시오. 과도하게 남아있는 문제를 해결하면 누출 문제가 해결 될 수도 있습니다.

+0

누수가 실제로 장치에서 발생합니다. 나는 당신의 제안을 시도하고 스택 트레이스를 살펴볼 것이다. – fuzz

+0

그래, 스택 트레이스를 보지 못하게 될 것 같습니다 ... – fuzz

+1

ObjectAlloc 도구를 추가하십시오. "기록 참조 횟수"로 표시되지 않은 경우 선택한 누수가있는 기존의 것을 삭제해야 할 수도 있습니다 (설정을 보려면 장비의 little (i)를 클릭하십시오). 다시 기록하고 누출 점검 시간을 2 초 (기본값은 10)로 설정하십시오. 그런 다음 누수가 기록 될 때 할당이 수행되는 시점을 확인하십시오 ... 또한 누출 메모리 주소 옆에있는 화살표를 따라 가면서 스택 추적이 있는지보십시오. –

2

한 번에 16 바이트 만 누출되는 경우 앱에서 문제가 될 가능성이 거의 없습니다. 누출이 시스템 프레임 워크에서 발생하는 경우 사용자의 잘못이 아닐 수도 있습니다.

+0

그건 항상 내가 생각하기에 위안이된다. 그것은 항상 같은 기능 비트에서 발생하는 것 같습니다 그래서 내 전체보기를 디버깅하고 내가 사용하고있는 QuartzCore 코드를 볼 수 있습니다 ... – fuzz

관련 문제