2011-07-06 3 views
1

나는 간단한 탐색 계층 구조를 가지고있다. 다음 문 (컨트롤러 1) 실행되는 경우가있어, 이제있는 navigationController popToRootViewController 및 viewWillDisappear

- (void)viewWillDisappear:(BOOL)animated { 
    NSLog(@"%s", __FUNCTION__); 

    if (![self.navigationController.viewControllers containsObject:self]) { 
     // View has been popped! Important to distinguish between view popping and tab switching. 
     // If parent view controller is active, pass a message. 
     if (_refParentViewController && !_isSearchViewController) { 
      _refParentViewController.valueX = @"xyz"; 
     } 
    } 

    [super viewWillDisappear:animated]; 
} 

:

내 viewWillDisappear 이런 식으로 뭔가를 보이는 결과

[self.navigationController popToRootViewControllerAnimated:NO]; 

는, 나는 충돌로 인해 얻을 _refParentViewController는 할당 취소 된 인스턴스입니다 (이 시점에서). _refParentViewController가 유효한지 어떻게 확인할 수 있습니까? 뷰 컨트롤러/뷰가 순서대로 파괴 될 것이라고 생각했지만 특정 순서가없고 컨트롤러 2가 컨트롤러 3보다 먼저 사라지는 것으로 보입니다.

확인할 수있는 것은 retainCount인데 그 것이 맞는지 확실하지 않습니다. 좋은 생각.

답변

3

나는 retainCount를 확인할 수 있지만, 좋은 생각인지 확실하지 않습니다.

끔찍한 생각입니다. retainCount는 쓸모가 없습니다. 전화하지 마세요. 그리고 retainCount는 이 아닐 수 있습니다. return 0; 객체가 할당 해제되었는지 여부를 알기 위해 사용할 수 없습니다.

부모 및 자녀 속성이 모두 assign 인 경우 누가보기 컨트롤러를 유지할 책임이 있습니까? 부모/자식 속성의 예상 수명에 걸친 retain이 필요합니다.

child 속성을 retain으로 만들고 부모 속성을 assign으로 남겨 두는 것이 좋습니다. 당신은 또한 확인해야 당신이 설정할 때 childnil에 (A retain 속성을 release 것, 만큼 당신이 재산의 세터 통과로) 먼저 nil에 아이의 parent 속성을 설정합니다.

+0

좋은 지적. 제안 된 솔루션이 효과가있었습니다. 감사. – Mustafa

관련 문제