3

자동 참조 계산 작업 중입니다. 사용자 정의 UIViewController 하위 클래스가 있고 -presentViewController: animated:completion:을 호출하거나 superview에서 뷰를 제거 할 때마다 NSLog "보기 드 오버"와 같은 내용이 표시 컨트롤러가 성공적으로 제거되었음을 알 수 있습니다. 내보기 컨트롤러에서 -dealloc 메서드를 구현했습니다. 그러나 나는 단지 두 개의 UIViewController 인스턴스 (유지 사이클 없음)가 있고 은 두 번째로 밀어 넣을 때도 호출되지 않습니다. 또는 수퍼 뷰를 제거하거나 부모 뷰 컨트롤러에서 제거 할 때 호출됩니다. 내가 놓친 게 있니? 인스 트루먼 테이션 (테스트 케이스가 아닌)에서의 원래 프로젝트에서는 컨트롤러가 제거 할 수없는 메모리 영역을 남겨두고 있음을 보여줍니다.UIViewController -dealloc 메서드가 호출되지 않았습니다.

+0

@ThilinaHewagama'-viewDidDisappear :'는 작동하지만이 방법은 할당 취소를 나타 냅니까? –

+0

NSZombieEnabled를 사용 해본 적이 한번도 없었으며 iOS6에서이 문제가 해결 된 것 같습니다. –

+1

당신이 Github에 게시 한 내용에서 당신이하려는 일이 전혀 명확하지 않습니다. 창에서 컨트롤러보기를 제거해도 컨트롤러 할당이 해제되지 않습니다. 여기에 게시해야합니다. 현재 수행중인 작업의 예입니다. 할당을 해제해야한다고 생각되는 컨트롤러의 전체 코드를 표시하십시오. 문맥에서 그것을 보는 것을 돕는다. – rdelmar

답변

11

보기 컨트롤러를 전환하고 전환하려는 컨트롤러를 할당 해제하려는 경우 해당 창의 루트보기 컨트롤러를 전환하십시오. 당신이 VC1에있어 및 VC2에 가고 싶다면, 다음, VC1에서이 작업을 수행 :

VC2 *vc2 = [[VC2 alloc] init]; // or however else is appropriate to get an instance of this class 
self.view.window.rootViewController = vc2; 

당신이 VC1를 가리 키도록 모든 속성을 작성하지 않은 경우, 다음이 스위치를 한 후 해제됩니다 .

(컨트롤러를 전환 할 때 애니메이션을 얻으려면) 모달 프레젠테이션 또는 모달 단절을 사용하려는 경우 viewDidAppear 메서드에서 프레젠테이션 이후에 루트 컨트롤러를 전환하여 초기 컨트롤러의 할당을 해제 할 수 있습니다 of vc2 :

-(void)viewDidAppear:(BOOL)animated { 
    [super viewDidAppear:animated]; 
    self.view.window.rootViewController = self; 
} 
+0

완벽! 정확히 내가 필요로하는 것. 양해 해 주셔서 감사 드리며 좋은 하루 보내십시오 :). –

0

구현할 수있는보기 컨트롤러 당신이

다음
- (void) dealloc { 
    NSLog(@"The instance of MyViewController was deallocated"); 
} 

보기 컨트롤러보기를 떠날 때 인쇄를 얻을 수와 할당 해제의 방법을 구현할 수 할당이 해제 인쇄를 얻으려면

- (void) viewWillDisappear:(BOOL)animated { 
    [super viewWillDisappear:animated]; 
    NSLog(@"The instance of MyViewController left the main view") 
} 
+0

죄송합니다. 제 질문에 이미'-dealloc'을 호출 했어야합니다. 문제는, 전혀 불리지 않는다는 것입니다 ... –

0

-presentViewController:animated:completion:을 사용하는 경우이 메소드를 호출 할 때마다 parentViewController가 유지됩니다. ModalViewController는 다른 ViewController 위에 단순히 푸시됩니다.

ModalViewController는 사용자 입력과 같은 것들을 위해서만 설계되었습니다. ParentViewController를 dealloc하려면 자체 구현을 처리해야합니다.

+0

답변 해 주셔서 감사합니다. 그러나 문제는 실제로'-presentViewController : animated : completion :'메서드를 호출하지 않는다는 것입니다. 방금 사건을 본떠 시도 했어. 실제로는 기존 VC에 연결되어 있지 않은 다른 수퍼 뷰에 사용자 지정 VC의보기를 추가합니다. –

+0

코드 예제 (https://gist.github.com)를 제공 할 수 있습니까? – mariusLAN

+0

물론, 거기에 가서 : https://gist.github.com/anonymous/93242d562263bbf132eb –

0

클래스가 유지되거나 (이 클래스의 내용이 유지되는 경우) dealloc 메소드가 호출되지 않고 다시 삭제되지 않습니다. ARC가 있거나 ARC가없는 프로젝트에 적합합니다. 코드를 두 번 확인하십시오.

+0

그 이유는 내가 테스트 프로젝트를 만들었습니다, 즉 유지 사이클을 피하기 위해서입니다 ... –

관련 문제