강제 로딩/언로드 뷰
-
22-07-2019 - |
문제
View 컨트롤러를 설정하여보기에서 필드를 새로 고치기 위해 내비게이션 컨트롤러에서 푸시되고 탐색 컨트롤러 뷰에서 팝업 될 때 객체를 출시 할 수있는 방법은 무엇입니까?
내 목표는보기 컨트롤러의 경우 :
- 내비게이션 컨트롤러 스택에서 눌렀을 때만 디스플레이를 새로 고침
- 내비게이션 컨트롤러 스택에서 팝업 될 때 데이터를 출시합니다.
- 컨트롤러를 가능한 한 많이 재사용합니다 (XIB 파일로드/하역 오버 헤드를 제거하기 위해)
대의원 방법이 있습니까? viewWillBePushed:
그리고 viewWillBePopped:
?
예시
세 가지 층의보기가 있다고 가정 해 봅시다.
Movies (MovieListController)
--> Movie Basic Info (MovieInfoController)
--> Movie Credits (MovieCreditsController)
수업이 있다고 가정합니다 Movie
각 영화를 대표합니다.
여기, 나는 3 개만 있고 싶다 UIViewController
S, 프로그램 런타임에서 각각의 인스턴스. 그래서 나는 똑같이 재사용 할 수 있습니다 MovieInfoController
다른 영화와 마찬가지로 MovieCreditsController
.
그러나 나도 원합니다 MovieInfoController
뷰 필드 (예 : 제목, 출시 날짜 등) 만 스택에 눌렀을 때만 업데이트합니다. 디스플레이를 구현합니다 viewWillAppear
언제라도 필드를 업데이트하도록 강요합니다 MovieCreditsController
튀어 나옵니다.
또한, 나는 원한다 MovieInfoController
참조를 발표합니다 Movie
, 그것이 팝업 될 때, 그리고 잠재적으로 큰 물체 (예 : 덮개 이미지). 이 논리를 구현합니다 viewWillDisappear
푸시 할 때 데이터를 해제하게됩니다. MovieCreditsController
스택에.
합리적입니까? 나는 그것에 대해 잘못된 방법으로 가고 있습니까?
해결책
영화 객체를 만들었 기 때문에 90%가 있습니다. MovielistController는 단일 MovieInfoconTroller를 소유해야합니다. 전화해야합니다 -setMovie:
내비게이션 컨트롤러에 밀어 넣기 전에. 전화 -setMovie:
필드를 업데이트해야합니다.
마찬가지로 MovieInfoController는 단일 moviecreditscontroller를 소유하고 전화해야합니다. -setMovie:
NAV 컨트롤러에 밀어 넣기 전에.
MovielistController 및 MovieInfoController에서 전화 할 수 있습니다 [subController setMovie:nil]
그들의 -viewDidAppear:
메모리를 확보하기 위해.