0

내 iPad 응용 프로그램의 루트 수준보기 컨트롤러는 UISplitViewController입니다.일부 내 View 컨트롤러가 didReceiveMemoryWarning을 수신하지 못하는 이유는 무엇입니까?

  • 하나 개의 마스터 뷰 컨트롤러합니다 (viewControllers 속성 항목 0)
  • 한 상세보기 제어기합니다 (viewControllers 속성 항목 1)

상세도 : 따라서, 2 뷰 컨트롤러가 컨트롤러는 마스터보기 컨트롤러의 탭 및 이벤트에 따라 변경되는 사용자 정의보기 컨트롤러입니다.

내 응용 프로그램이 메모리 경고 이벤트를받을 때 내 문제가의 didReceiveMemoryWarning 방법은 내 모든 뷰 컨트롤러라고되어
- (void)replaceSecondViewControllerBy:(UIViewController *)viewController { 
    [[self.viewControllers objectAtIndex:1] dismissModalViewControllerAnimated:NO]; 
    NSArray *newVC = [NSArray arrayWithObjects:[self.viewControllers objectAtIndex:0], viewController, nil]; 
    self.viewControllers = newVC; 
} 

, 제외 :

이 상세 뷰 컨트롤러를 변경하려면 다음 코드를 사용 이전 상세 뷰 컨트롤러의 경우. 아직 다른 개체 (여전히 실행중인 비동기 메서드 포함)에 대한 대리인이기 때문에 할당이 취소되지 않습니다.

내 질문은 :

  • didReceiveMemoryWarning 메시지를받을 수있는 UIViewController에 대한 규칙은 무엇입니까? 이전의 디테일 뷰 컨트롤러가이 뷰를 수신하지 않는 이유는 무엇입니까?
  • 이러한 이전보기 컨트롤러에서 didReceiveMemoryWarning 또는 viewDidUnload을 안전하게 호출 할 수 있습니까?

답변

0

작성시 UIViewControllerUIApplicationDidReceiveMemoryWarningNotification에 가입합니다. 할당이 해제되면 알림을 제거합니다. 따라서 컨트롤러의 뷰가 뷰 계층 구조에 없더라도 didReceiveMemoryWarning이 호출됩니다. 따라서 컨트롤러가 할당 해제되지 않았는지 확인하십시오.

컨트롤러에서 알림 관찰을 제거하기 위해 다음 코드를 사용하는 경우 메모리 알림 수신을 중지합니다.

[[NSNotificationCenter defaultCenter] removeObserver:controller name:nil object:nil]; 
관련 문제