2013-05-19 3 views
1

시나리오 : 일련의 개체가 있습니다. 장치가 세로 모드에있을 때 UITableView를 사용하고 가로 모드에있을 때 UICollectionView에 표시하려고합니다. 이를 위해 UIViewController를 컨테이너로 사용하고 UICollectionViewController 및 UITableViewController에 각각 하나씩 자식보기 컨트롤러 두 개를 제공하려고합니다. 오리 엔테이션이 자주 변경되어 부모가 두 자식 컨트롤러 사이를왔다 갔다합니다.보기가 표시되지 않는 경우에도 부모 UIViewController와 연결된 여러 자식보기 컨트롤러를 유지하는 것이 좋습니까?

iOS 용 View Controller 프로그래밍 가이드 (2012-12-13)에서 아이들 간의 전환에 대해 이야기하는 117 및 118 페이지에서 자녀보기가 제거 될 때마다 부모로부터 하위보기 컨트롤러를 제거합니다 뷰 계층 구조에서. 특히, Listing 14-3을 참조하십시오.

메모리 나 다른 이유로 인해 필요합니까? 아니면 부모와 관련된 두 개의 하위보기 컨트롤러를 모두 유지하고보기간에 앞뒤로 움직여도됩니까? 두 기술 모두 성능 이점이 있습니까?

+0

귀하의 질문에 대한 답을 모르겠지만 컨트롤러를 어린이로 추가 할 때 어떤 시간 지연도 본 적이 없으므로 두 자녀를 모두 연관시켜야 할 이유가 없습니다. 부모의. – rdelmar

답변

3

두 뷰 컨트롤러를 모두 자식으로 사용하는 데는 아무런 문제가 없습니다. 즉, 뷰가 표시 될 때 적절한 리소스를 공유하거나 (즉, 표시 할 개체가 두 개가 없어야 함) 숨겨져 있습니다.

두 개의보기 컨트롤러가 동일한 데이터를 표시하므로 두보기 사이를 전환 할 때 다른보기에서 발생한 상황에 따라 스크롤 된 위치가 업데이트됩니다. 이 경우 다른보기 제어기를 할당 된 상태로 유지하는 것이 많은 이점이 없습니다. 저장하는 유일한 방법은 이전에 할당 된 셀을보기 내에 캐시하는 것입니다. 따라서 대부분의 메모리를 효율적으로 사용하려면 표시되지 않은보기 컨트롤러를 제거해야합니다. 이것은 런타임에 조금 더 비싸지 만 눈에 띄지 않아야합니다.

+1

컨테이너에 항상'didReceiveMemoryWarning'을 구현하고 그 단계에서 숨겨진 뷰 컨트롤러를 제거 할 수 있습니다. –