2012-04-02 2 views
1

내 루트 viewController viewWillDisappear, viewWillUnload viewDidUnload의 메소드는 절대로 호출되지 않습니다 (각각에 로그 문이 있음).viewWillDisappear, viewWillUnload viewDidUnload never called

여기에 앞서 나온 것처럼 보이지만 답변이 명확하지 않습니다. 이것은 viewController 뷰가 UINavigationController에 포함되어야한다는 것을 암시하는 것처럼 보입니다.이 뷰는 이상하게 보입니다. 이 경우 인 경우 좀 정리를하고 보장 할 수있는 다른

viewWillDisappear and viewDidDisappear never get called

, 내 UIDocument의 변경 사항이 저장 얻을?

편집 : root viewController 이벤트가 어떻게 작동하는지 오해 한 것 같습니다 (고유 한 상태 등). AppDelegate 메서드를 조사합니다. 내 UIDocument가 저장되고 내 Core Audio가 올바르게 종료되었는지 확인하려고합니다.

닫기 : AppDelegate에서 게시 한 알림으로 종료되었습니다. 당신이 한 번 해본 후에 꽤 잘 작동하고 + 간단한 것들을 보입니다.

AppDelegate에

- (void)applicationDidEnterBackground:(UIApplication *)application 
{ 

[[NSNotificationCenter defaultCenter] postNotificationName: @"handleCleanup" 
                object: nil 
                userInfo: nil]; 
} 

에서

// 및 알림에 등록 나의 VC는 :

[[NSNotificationCenter defaultCenter] addObserver: self 
             selector: @selector(saveAndCleanup) 
              name: @"handleCleanup" 
              object: nil]; 

답변

3

이 루트보기, 그리고 당신이 그것을 변경하지 않을 경우 - 사라 않을거야. ViewWillDisapear가 앱을 배경에 놓을 때 호출 될 수도 있지만 기억이 안납니다.

메모리 경고를 받으면 뷰 컨트롤러는 언로드되지만 화면 상인 경우 언로드되지 않습니다.

viewWillDisappear :이 방법은 도면에 응답이라고

는 뷰 구조에서 제거된다. 뷰가 실제로 제거되기 전에 그리고 애니메이션이 구성되기 전에이 메서드가 호출됩니다.

viewDidUnload :

메모리 부족 상태가 발생하고 현재 뷰 컨트롤러의 뷰가 필요하지 않을 때, 시스템은 메모리로부터 그 플레이를 제거하는 것을 선택할 수있다. 이 메서드는 뷰 컨트롤러의 뷰가 릴리즈 된 후에 호출되며 최종 정리를 수행 할 수있는 기회입니다. 뷰 컨트롤러가 뷰 또는 해당 하위 뷰에 대한 별도의 참조를 저장하는 경우이 메서드를 사용하여 이러한 참조를 해제해야합니다. 이 메소드를 사용하여 뷰를 지원하기 위해 작성했지만 뷰가 없어지면 더 이상 필요하지 않은 오브젝트에 대한 참조를 제거 할 수도 있습니다. 이 방법을 사용하여 사용자 데이터 또는 쉽게 다시 생성 할 수없는 기타 정보를 해제해서는 안됩니다.

+0

doh! 그건 의미가 있습니다. 시뮬레이터에서 테스트 중이며 해당 뷰 이벤트가 트리거 될 것으로 예상됩니다. AppDelegate가 내 정리를 처리 할 올바른 장소 인 것 같습니다. –

0

불필요한 캐시 또는 리소스를 해제하기위한 일반적인 위치는 - (void)didReceiveMemoryWarning입니다. 이 방법으로 그렇게하지 않으면 iOS가 메모리가 부족할 때 앱을 종료하도록 선택할 수 있습니다.

모바일 앱의 성격을 고려하여 가능한 한 자주 저장해야합니다.일반적인 구현은 타이머를 사용하여 자동 저장을 실행합니다. 때로 전화가 오면 iOS는 많은 메모리를 사용하기 때문에 앱을 백그라운드에 두지 않고 앱을 종료하도록 선택할 수 있습니다.

또 다른 참고로 - (void)didReceiveMemoryWarning이 호출되면보기가 언로드된다는 것이 확실합니다. 그러나 앱을 죽일 수있는 것은 아닙니다. 다음에 앱을 열면 viewDidLoad이 다시 호출됩니다. 이러한 의미에서이 방법으로 파일을 시도하고 저장할 수 있습니다.

관련 문제