2013-07-19 5 views
2

데이터 및 UI를 업데이트하는 방법을 실행할 때마다 힙 증가가 발견되었습니다. 다음은 Inspector에서 볼 수 있습니다. enter image description here 메소드를 실행할 때마다 약 1MB의 거대한 힙이 생성됩니다. 여러 번 호출 한 후 앱이 다운됩니다. enter image description hereios - ARC가있는 힙 증가율 :

enter image description here

코드의 모든 메모리 누수를 찾을 수 없습니다 : 호출 스택에 의해 아래로가는

enter image description here

이 정적 기능을 발견했다. 도와주세요.

UPDATE (ARC는 ON입니다) :

그래서 지금은 정적 방법 중 하나 개 NSCalendar 객체를 사용하고 있는데 약간의 도움이,하지만 난 방법을 실행할 때마다 여전히 1메가바이트 더있다. enter image description here 이제 Inspector는 코드와 관련이없는 여러 메모리 주소를 표시합니다.

enter image description here

+1

말을 ... "dateDifferenceFromDate는"반드시 누출 1메가바이트에 대해 책임을지지 않습니다 것을 하드. 코드의 무언가가 UI의 일부를 유지하고 있거나 코드에 사이클을 유지하고있을 가능성이 있습니다. 코드를 더 이상 보지 않고도 할 수있는 일은 많지 않습니다. –

+0

잘 - 명확하게 dateDifferenceFromDate는 범인이 아닙니다. GraphController :: drawGraph는 메모리 스파이크를 볼 때 UI를 업데이트하는 것으로 보입니다. drawGraph에 더 많은 코드를 붙여 넣을 수 있습니까? – Jailbroken

+0

확인. 여기 http://pastebin.com/yvvX6GZM 크고 더러운입니다. 하지만 가장 흥미로운 점은 내가 같은 속성을 가지고 있다는 것입니다. '@property (nonatomic, retain) UIImageView * drawArea' drawGraph 끝 부분에서 변경합니다. –

답변

0

문제는 dateFormatter에서 발생하지 않았습니다. 그것의 컨테이너 여분 보유했다. 웬일인지 나는 컨트롤러에서 setParentView라고 불렀다. 도움이

답변 : https://stackoverflow.com/a/17767593/1974008

1

당신은 NSCalendars 많은 만들 필요가 없습니다 - 당신이 autoupdatingCurrentCalendar를 재사용하는 경우 (예를 들어,이 GraphController 바르로 저장) 및 -dateDifferenceFromDate:to:에 그것을 통과, 당신은 (거의) 일정 생성을 제거 할 수 있습니다.

UPDATE

수는 속도 향상에만 나 포기 기억이 도움이?

이 제안의 도움이되는 가장 좋은 방법은 측정입니다. 캡쳐 화면은 ICU 시간대 (캘린더에서 사용) 작성을 가장 중요한 부분으로 제안합니다. 당신이 얼마나 많은 시간을 당신이 호출했는지 (즉, 당신이 얼마나 많은 수를 생성했는지, 구현이이 API를 통해 정보를 공유/캐시한다면) 그래프를 그릴 때 ... 그러나 당신이 제시하는 정보는 그것이 '많은 것'이라고 믿게 만든다. 통화 당 하나의 캘린더는 -dateDifferenceFromDate:to:입니다.

그렇습니다. 불필요한 중복 객체를 제거 할 수 있습니다. [NSCalendar currentCalendar]은 싱글 톤을 반환하지 않습니다 (샘플에서는이를 보여줍니다).

또한 NSDateComponents은 일정 인스턴스를 참조 할 수 있습니다.

캘린더 만들기는 메모리뿐만 아니라 매우 많은 시간이 소요될 수 있습니다.

또한 NSCalendar이 아니며 스레드 안전합니다.

그래서 프로그램이 불필요하게 많은 임시 파일을 생성합니다. 메모리의 대부분은 (전부는 아닐지라도) '곧'나오 겠지만, '계산'해야 할 일이 많다면 자동 배출 풀에 막대한 양의 예금이있을 수 있습니다. 이를 줄이기 위해 내부 오토 릴리즈 풀을 생성 할 수 있지만, 하나의 캘린더를 사용하면 속도와 메모리를 쉽게 최적화 할 수 있습니다.

많은 시스템 API가 막후에서 캐시되므로 놀라운 메모리 증가를 가져 오지만 IDK가 이러한 경우 그 중 하나입니다.

이 블로그 게시물도 재미있을 수 있습니다 http://www.mikeabdullah.net/NSCalendar_currentCalendar.html

하지만 실제로는 그냥 후 측정 한 자동 업데이트 일정을 사용해보십시오 것입니다. 그러면 얼마나 도움이되는지 알 수 있습니다. 구현.

+0

버려진 메모리에 도움이 되나요? 아니면 속도가 향상 될 수 있습니까? –

+1

@Goga 업데이트보기 – justin

+1

많은 감사! 나는 이것을 시도 할 것이다. –

0

메모리 "누출"이 충돌의 원인이 아닙니다. 분명히 메모리는 ARC에 의해 재 확보된다. 충돌에 대해 우리에게 말해 줄 수 있습니까?

+0

왜 안 되니? 모든 것이 잘 빠르며 빠르지 만 업데이트를 반복하면 (약 5 회) 충돌이 발생합니다. –

관련 문제