2011-05-03 4 views
2

저는 숙련 된 C/C++ 프로그래머이며 메모리 관리 문제에 익숙합니다. 나는 과거에 몇 개의 작은 아이폰 앱을 출하했다. 메모리 누출에 대한 최신 앱을 확인하려고 시도하고 있습니다. 너무 많은 앱이 있기 때문에 어떤 진행도 할 수 없습니다. 앱을 시작하고 첫 번째 화면을 보는 것만해도 누수가 12,000 건이 넘습니다.iPhone 메모리 누수 문제 해결, 시작하기

나는 아마도 여러 가지를 간과했음을 알고 있지만 코드를 작성하는 데는 합리적으로 신중했습니다. 내 dealloc 메서드에서 allocalleded 모든 것을 해제하려고 시도했다. App Delegate의 init 메소드에서 한 번만 allocalled 된 몇 가지 사항을 볼 수 있기 때문에 내 App Delegate가 결코 릴리스되지 않는 것과 같습니다. 그것들은 절대로 수정되지 않고 dealloc 메소드에서 해제된다.

이 응용 프로그램은 주로 인터페이스 빌더를 사용하여 설정 한 약 15 개의보기가있는 탭 컨트롤러를 기반으로 제작되었습니다.

도움을 주시면 감사하겠습니다.

+0

당신이 명시 적으로하지 않으면 귀하의 애플 리케이션 델리게이트는 귀하의 애플 리케이션의 수명 동안 공개 될 가능성이 높습니다. 일반적으로 앱이 끝날 때까지 dealloc을 호출 할 필요가 없다. –

답변

5

사과의 인스트루먼트는 꽤 고급입니다. 원래 메모리 누수가 발생한 정확한 방법을 보여줄 수 있습니다. 이러한 메소드를주의 깊게 읽고 코드를주의 깊게 읽으십시오. 거기에는 보통이 줄이 있습니다. 너 내가 어떻게 그렇게 바보가 될 수 있다고 생각 했어.

도움이되지 않는다면 xcode로 "분석"을 시도해보십시오. 코드에서 오류와 누출을 찾아 내고 * 번을 두 번 저장해보십시오.

+0

예, 스택 추적 및 코드 줄을 살펴 보았습니다. 이 경우, 나는 app delegate의 init 메소드로 생성 된 객체를 보았다. 그게 중요하다면 그것들도 속성입니다. 두 속성을 모두 사용해 보았습니다. 표기법 :'self.thing = [[Thing alloc] init];'autorelease]; 'thing = [[Thing alloc] init];' –

+0

당신이 self.thing =을 사용하면 객체가 다시 유지 될 때 autorelease 할 필요가있다. 인스턴스 var = 직접하면 안된다. autorelease. 인스턴스 변수를 해제하기 위해 dealloc 메소드를 구현하는 것을 잊지 않았 으면 좋겠습니까? –

+0

좋아, 나는 바보 야. 나는 장비에서 강조한 "할당"을 "누수"가 아니었다. 실제 누출 건수는 합리적입니다. –