2012-05-18 2 views
2

범용 iOS 앱에서 이상한 문제가 있습니다. 앱을 프로파일 링하는 동안 악기 도구에서 유효한 메모리 누수가 표시되지 않습니다. 여전히 할당 크기는 모든 페이지 변경시 50-100kb 씩 증가합니다. 누출 기기는 책임 호출자가 mem_alloc으로 누출 된 부분 만 표시합니다.유효한 메모리 누출이없는 경우에도 내 애플리케이션에 메모리 경고가 발생합니다.

사용 시간이 지나면 앱에서 메모리 경고를 받기 시작하고 앱에서 시간이 초과되어 앱이 다운됩니다. 흥미롭게도 현재 총 메모리 할당량은 6 ~ 12MB입니다. 디버그 모드에서 역 추적 할 때 앱에 스택 정보가 표시되지 않습니다.

이 충돌이 발생하는 이유는 전혀 알 수 없습니다. 어떤 도움을 주시면 감사하겠습니다.


내 악기의 일부 스크린 샷을 첨부하십시오. enter image description here enter image description here enter image description here

+0

정적 메모리 분석기를 사용해 보셨습니까? – rishi

+0

정적 메모리 분석기에 대해 잘 모르겠습니다. 나 좀 설명해 줄래? –

답변

1

비록 내가이 질문을하고 적절한 답변을 얻지 못했던 것이 정말 길다. 내 질문으로 돌아가서이 문제에 대한 해결책이 다른 초기 선발자에게 도움이 될 것이라고 생각합니다. 그래서 여기에 효과가 내 솔루션을 게시 오전 :

이 경우 진짜 범인은 내가 응용 프로그램에서 이미지를 사용하는 방법이었다. 나는 단순히 [UIImage ImageNamed :]를 호출하여 그것을 사용하고있었습니다. 사실이 방법은 이미지 크기의 메모리를 누출시킵니다. 이 문제에 대한

솔루션 ImageWithData를 호출하여 이미지를 사용하는 것입니다 (코드 아래 참조)

NSString *fileLocation = [[NSBundle mainBundle] pathForResource:fileName ofType:extension]; 
NSData *imageData = [NSData dataWithContentsOfFile:fileLocation]; 
[UIImage imageWithData:imageData]; 

희망이 사람을 도움이됩니다.

+0

ARC를 사용하고 있는지 여부는 원래 게시물에서 분명하지 않았습니다. 수동 참조 카운팅을 사용하는 경우 UIImage 파일을 어떻게 처리하지 않는 것이 좋을까요? Apple 프레임 워크 클래스 메소드가 2 년 넘게 이러한 방식으로 메모리를 유출했으며 눈에 띄지 않는다는 것을 믿기가 힘듭니다. – mckeejm

+0

@mckeejm이 질문은 2012 년에 물었습니다. 그 당시 ARC가 아닌 코드를 사용하고있었습니다. 나는 당신의 견해에 동의 할 것이고, 애플 프레임 워크 클래스 메소드는 이와 같이 메모리를 누설해서는 안되며, 메모리 누수가 잘못되었다고 생각한다. 기본적으로 imageNamed 함수는 이미지 데이터를 캐시하여 결국 메모리를 먹습니다. 또한 imageNamed 함수와 imageWithData를 비교하여 검색하면 사람들이 imageWithData를 사용하도록 제안합니다. –

3

당신은 앱에서 다음과 같이 메모리 할당을 확인합니다 -

  1. 정적 메모리 분석기 검사 정적 메모리 누수를 사용 Instruments 체크 AllocationLeaks

  2. 사용.

또한 당신은 당신의 뷰 컨트롤러의 올바른 릴리스를 확인해야 "> 분석 - -> 제품 엑스 코드" 이가 "cmd를 +는 + B를 이동"또는 이동 사용 중 하나를 사용하십시오.

+0

빠른 답변 주셔서 감사합니다. 나는 당신이 말한 두 가지 일을했으며 그 후에 만 ​​질문을했습니다. –

+0

계기의 어떤 스크린 샷을 보여줄 수 있습니다. 정확하게 메모리 사용량이 올라갑니다. – rishi

+0

시간을 좀주세요. 여기에 게시하겠습니다. –

관련 문제