2012-04-05 4 views
0

일부 ViewController 사이를 전환하는 탐색 기반 앱이 있습니다. "goHome"버튼을 누르면 popViewControllerAnimated: 메서드가 호출되고 기본 화면으로 돌아갑니다. 그러나 문제가 있습니다 : dealloc 메소드가 호출되지 않았거나 이전 뷰의 모든 요소가 해제되지 않았습니다. 모든 애니메이션/UI 요소는 메모리에 매달려 있습니다. 어떻게해야합니까? 당신의 UIViewController에서IOS dealloc이 호출되지 않습니다.

+1

이것은 누출입니다. 누출의 원인을 푸가해야합니다. 도구 유출 도구가 도움이 될 것입니다. – wbyoung

답변

1

먼저 자동 참조 횟수로 전환하면 더 쉽게 사용할 수 있습니다. 둘째, 컨트롤러 나 다른 객체에 대한 참조가 더 이상 존재하지 않는지 확인하십시오.

재미있는 이야기, 한 번 NSFetchedResultsController의 델리게이트를 nil 및 기타 메모리 오류로 설정하는 것을 잊었으며 페치 된 결과 컨트롤러가 델리게이트를 호출하려고했지만 이미 사라진 경우 추한 예외가 발생했습니다.

+1

ARC에는 누출에 대한 문제가 거의 없습니다. 약간 적은 코드 만 작성하면됩니다. Obj-C의 초보자는 ARC에서 무슨 일이 일어나고 있는지 이해하려면 MRC로 시작해야합니다. – Sulthan

+0

참조 카운팅과 그주의 사항을 이해하기 위해 C에서 직접 수동으로 구현하는 것이 좋습니다. 많은 결과물로 인해 진행 상황을 볼 수 있습니다. ARC가없는 Objective C는 오히려 무의미한 느낌을줍니다. Objective C의 목표 인 Cocoa와 Grand Central Dispatch의 수동 유지 및 해제 호출과의 갭은 오래 동안 충분히 추악한 역설이었습니다 ... – yeoman

+0

수동 메모리 관리 이해 C만으로는 여전히 충분하지 않을 것입니다. ARC가 Obj-C/Swift interop에도 영향을주는 명명 규칙을 사용하는 것도 있습니다. ARC는은 총알이 아니지만 지옥이 많은 도움이 될 것이라고 확신합니다. – themarketka

1

당신의 dealloc 올바른 서명이 마지막 슈퍼 뷰 호출되어 있는지 확인합니다 :

- (void) dealloc { 
    //Release your stuff 
    [super dealloc]; 
} 

는 또한 UIViewControllers를 처리 할 때 당신은뿐만 아니라 viewDidUnload 메모리 다룰 필요가 기억을 (아무튼 당신의 문제를 실제로 해결하지는 못했지만 거기에 던질 것이라고 생각했습니다.)

+0

그게 정확히 내가 사용하고 여전히, 아무것도. NSLog를 테스트 해봤는데 호출되지 않았습니다. – Teo

관련 문제