2

계측 장비와 함께 계측기를 사용하고 있습니다. 내 앱과 고정 된 상호 작용 만 테스트하고있다.iPhone : 계측기 할당이 꾸준히 증가합니다

나는 네 단계 깊은 탐색 컨트롤러가 있습니다. 처음 두 단계는 표준 테이블 뷰 컨트롤러이고 마지막 두 단계는 동적으로로드 된 이미지가있는 사용자 지정 컨트롤러입니다.

그래서 나는 (성능 도구를 사용하여 실행을 통해 -> 할당) 기기에서 내 응용 프로그램을 실행하고 다음을 수행 상호 작용 : 이제

1. App Loads 
2. I wait a bit until allocations graph stabilizes 
3. I tap/push into my navigation controller until the deepest level. 
4. I wait for the images to load and for the allocations graph to stabilize. 
5. I tap back out of the navigation controller until I'm back to the root level. 
6. I wait for the allocations graph to stabilize. 
7. GOTO 3. 

제가 발견 한 것은 그 7 3에서 각 반복 사이 할당 그래프는 약간 높은 값을 보여줍니다. 그래서 같은 일을하고 있고 모든 뷰 컨트롤러의 dealloc이 호출 되더라도 전반적인 할당은 증가하고 있습니다.

그래서 타임 라인은 대략 다음과 같습니다

1. Start: 1mb 
2. Push controllers/Load images: 4mb 
3. Pop controllers: 1.1mb 
4. Push controllers/Load images: 4.1mb 
5. Pop controllers: 1.2mb 
6. ... etc ... (always increasing slightly) 

그래서 내 질문이 내가 누출이 있거나이 정상적인 의미합니까입니까? 또한 할당 그래프 데이터가 실제로 나타내는 것은 무엇입니까? 그리고 내가 초기 상태로 다시 빠져 나가고 있는데도 왜 가치가 증가하고 있습니까? 나는 내 앱이 충분히 오래 실행된다면 모든 사용자가 뷰 컨트롤러를 밀고 터지는 것 일지라도 너무 많은 메모리를 소비 할 것이라고 걱정한다.

어떤 생각이 도움이 될 것입니다.

답변

0

누출이있을 가능성이 있습니다. 당신이 그들을 찾을 수있는 누출 도구를 확인하십시오.

+0

제안 해 주셔서 감사합니다. 네가 맞다. 내가 누출 된 장비가 누출됐다고 알았다. 정확히 무슨 일이 일어나는지 파헤쳐 봐야 겠어. – nebs

+0

푸시 한 다음 팝하는보기 컨트롤러가있는 경우 메모리 사용이 처음 푸시하기 전과 완전히 동일해야합니까? 또는 그것이 올라가는 것이 정상입니까? .2MB? –

0

예, 누수입니다. 라인을 따라 귀하의보기 컨트롤러 중 하나가 뭔가가 누락되었습니다.

0

이미지를로드하는 경우 [UIImage imageNamed :]를 사용하면 시스템이 캐싱되어 메모리 사용의 원인이 될 수 있습니다. 그러나 짧은 예, 당신은 누출이 있습니다.

+0

좋은 지적. 참조하고 있던 이미지로드는 imageNamed를 사용하지 않지만 실제로는 사용자 정의 테이블 셀과 버튼 배경 이미지에 imageNamed를 사용합니다. 그러나 이것이 전체 배분 증가에 기여한다고 생각하지 않습니다.imageNamed 캐시 이미지는 후속 푸시/팝에서 이미지를 다시로드하지 않아도 될까요? 아니면 다르게 작동합니까? – nebs

+0

나는 imageNamed 누수가 고정되어 있다고 확신한다. – cobbal

1

시뮬레이터 또는 장치에 있습니까?

일부 시스템 라이브러리는 시뮬레이터에서보다 더 자주 장치에서 메모리를 해제하므로 장치에 문제가 있는지 확인하는 것이 좋습니다.

누수가 아무것도 표시하지 않는다면, 생각지도 못하는데도 여전히 어딘가에 대한 참조를 보유하고 있기 때문입니다. 이를 추적하려면 그래프가 증가하는 부분을 강조 표시하고 "생성되고 아직 살아있다"를 선택하십시오. 이제 할당 된 메모리 만 볼 수 있으며 문제가있는 곳을 추적 할 수 있습니다.

+0

그것은 시뮬레이터에있다. 제안 해 주셔서 감사합니다. 실제로 누출이 있습니다, 3 사실. 나는 정확히 어디에서 더 깊은 지 파고 들어야 할 것입니다. – nebs

1

최신 아이폰 SDK를 가지고 계시다면 함께 제공되는 인스 트루먼 트의 버전 (He is Shot Features)이 있습니다. 더 많은 정보를 얻기 위해 WWDC '10 비디오의 일부를 볼 수는 있지만, 처음에는 컨트롤러를 처음 쏘아 본 다음 두 번째로 다시 튕기는 장면을 다시 본다. 두 순간에 다른 메모리 할당을 보여줍니다.

+0

그래, 새로운 SDK 및 도구 2.7을 사용하고 있습니다. 이것은 멋진 기능처럼 들리지만 나는 어쩔 수 없습니다. 그것을 확인, 감사합니다. – nebs

+0

힙 샷 기능은 이런 종류의 메모리 동작에 필요한 것과 같이 들립니다. 비슷한 문제를 해결하기 위해 이미 사용했습니다. –

관련 문제