0

iPad 앱을 디버깅 할 때 메모리가 부족하여 일부보기 컨트롤러 'viewDidUnload이 호출되었습니다. 그러나 몇 초 후, 그들의 viewDidLoad이 호출됩니다. 그리고 메모리가 부족하여 다시 viewDidUnload, 그 다음에 viewDidLoad이 다시 나타납니다. 이것은 파일 시스템이 메모리가 부족하여 파일을 스왑하는 것과 같습니다.dealloc 후에 viewDidUnload가 호출 되었습니까?

이렇게 될 예정입니까, 아니면 잘못 했습니까?

그럼 이걸 없애기 위해 뷰 컨트롤러를 공개하고 싶습니다. 그러나 때때로 viewDidUnloaddealloc 전에 호출 된 다음 deallocated보기 컨트롤러에 전송 된 선택자로 인해 충돌합니다.

도움 주셔서 감사합니다.

+0

어,이 문제를 게시 한 직후 첫 번째 부분에 대해 설명했습니다. 컨트롤러의 view 속성을 [view removeFromSuperview]로 사용하여 메모리에없는 경우보기를로드합니다. [controller isViewLoaded]를 사용하면이를 해결할 수 있습니다. – Kail

+0

문서를 읽었을 때보기 속성에 액세스 할 때보기가로드되는 것으로 나타났습니다. 내가 의사에게 가능한 한 많이 강조 해 주었으면 좋겠다. – Kail

답변

0

이것은 정상적인 동작입니다. viewDidUnload은 뷰가 해제되었음을 컨트롤러에 알리기 위해 메모리 부족 상황에서 호출됩니다.

View Controller Programming Guide for iOS에는 단계의 명확한 개요가 있습니다.

는 특히, 그것은 언로드주기를 커버 섹션 Understanding How Views Are Loaded and Unloaded에 설명 된 단계를 보면 :

  1. 응용 프로그램은 시스템에서 경고 메모리 부족을받습니다.

  2. 각보기 컨트롤러는 그 didReceiveMemoryWarning 메서드를 호출합니다. 이 메서드를 재정의하는 경우 뷰 컨트롤러에 더 이상 필요없는 개체 또는 개체를 해제해야합니다. 보기 컨트롤러보기를 해제하려면 코드를 사용하지 마십시오. 구현시 지점에서 super를 호출하여 기본 구현 이 실행되는지 확인해야합니다. 디폴트 구현은 뷰를 해제하려고 시도합니다.

  3. 보기를 안전하게 해제 할 수없는 경우 (예 : 화면에 표시됨) 기본 구현이 반환됩니다.

  4. View Controller는 viewWillUnload 메소드를 호출하여 뷰가 제거 될 예정임을 서브 클래스에 알립니다. 하위 클래스 은 일반적으로 뷰가 소멸되기 전에 뷰 속성을 저장해야 할 때 viewWillUnload 메서드를 재정의합니다.

등등.

구체적인 경우 이 경우보기 컨트롤러를 해제하고 싶지 않습니다. 메모리가 부족한 상태에서 수행하려는 추가 메모리 관리가있는 경우 기본 구현 인 didReceiveMemoryWarning을 재정의해야합니다. 문서 상태이므로 [super didReceiveMemoryWarning];에 전화하는 것을 잊지 마십시오.

+2

사이드 노트'viewDidUnload'는 iOS 6부터 사용되지 않는다. – robertvojta

관련 문제