2011-01-18 3 views
3

이것은 iOS에서, 장치는 iPad입니다.메모리 누수 찾기 도움 (일반적인 팁)

여기 무슨 일이야 :

  1. 나는 장치 또는 디버그에 응용 프로그램을 실행하고 엑스 코드를 사용하여 실행합니다. 내가 레벨 1의 메모리 경고가 5 분 후에
  2. 는 분 후에 나는 또 다른 분 이후 레벨 2
  3. 의 메모리 경고,

Program received signal: “0”. 내가 누수를 사용하여 누출 검사를받을 계기 및 누수가 감지되지 않았습니다. 그러나 Activity Monitor에 따르면 내 앱은 처음에는 30MB를 사용하고 시간이 지남에 따라 크기가 100MB 이상으로 커집니다 (약 200KB/초). 따라서 Leaks는 모든 메모리 누수를 감지하지 못합니다.

그럼 내 질문 : 누수가 감지 할 수없는 경우이를 찾을 수있는 일반적인 방법이 있으며 이러한 누출을 찾는 데 더 좋은 도구가 있습니까?

답변

6

,

  1. 이름을 쉽게 악기에서 그들을 볼 수 있도록 접두사를 가진 모든 당신의 클래스

  2. XCode-> 실행 -> 성능 도구 -와 실행 > 할당

이제 앱을 중지하고 검색 상자에 누출이 의심되는 클래스 이름을 입력하십시오. (이것은 접두사가 편리한 곳입니다). "기록"버튼으로 장비 다시 시작

  1. 개체를 할당하면 살아있는 열이 위아래로 이동해야합니다. 그것이 누출이없는 경우에주의하십시오.
+0

여전히 누수/버려진 메모리를 찾을 수는 있지만 유용한 방법 인 것 같습니다. – Morrowless

+1

@hyn, 클래스가 데이터를 보유하고 있으며 누수가 아닌 것일 수 있습니다. 자동 릴리즈 풀을 살펴보고 메모리 집중 형 코드 블록을'NSAutoReleasePool'에 랩핑하고 의미가있을 때'[pool drain]'을 호출 할 수 있습니다. –

0

도구를 사용하여 누출을 찾을 수 있으면 좋지만 완전히 엉망이된다면 내가 사용하는 다른 기술이 있습니다.

거의 모든 것을 주석 처리 한 다음 메모리 누수가 다시 발생할 때까지 한 번에 하나씩 구성 요소를 천천히 다시 추가하십시오. 그렇게하면 문제를 일으키는 함수 또는 코드 블록을 제로로 지정할 수 있습니다. 이것은 내가 그것을 접근하는 것이 어떻게

1

언급 한 경우 항상 누출이 필요하지 않습니다. 여기서 언급 한 실행 시간에 자동으로 릴리즈 된 많은 객체를 사용했을 것입니다. 컬렉션 개체에 많은 크기의 개체를 추가 할 수 있습니다. 이 경우 해당 사례에 대해 별도의 자동 릴리스 풀을 사용하여 응용 프로그램의 메모리 사용 공간을 줄이십시오.