2014-01-15 2 views
3

모든,여러 아이 뷰 컨트롤러

ParentViewControllerChildViewControllers 몇 가지를 사용할 때 몇 가지 성능/메모리 문제로 실행하고 있습니다에 대한 조언이 필요합니다. 여기에 내 상황이있다 : 나는 ChildViewControllers의 다이나믹 넘버를 가진 ParentViewController을 가지고있다. 그들은 수십 배의 20 배가된다. 그들은 UIScrollView에 포함되어 있으며, 호출이된다. 페이지에 여러 개가있을 때 문제가 발생합니다 (처음 두 개만로드 한 다음 다른 페이지를 스 와이프하면됩니다). ParentViewController의 많은 부분이 메모리로 인해 충돌을 일으키기 시작합니다.

에는 많은 문제가 있습니다. 가능한 한 효율적인지 확인하기 위해 노력하고 있지만, 오래된 장치에서이 방법에 대한 우려가 있습니다. 5S에서 충돌).

뷰 컨트롤러를 뷰로 만 변경하면 도움이되지만 VC가 복잡하기 때문에 꽤 큰 노력이 될 것 같습니다. 내가 가진 한 가지 제안은 기존 뷰 컨트롤러의 뷰에서 뷰를 만들고 뷰에 여러 대리자 메서드를 설정하고 ParentViewController 뷰의 뷰와 상호 작용하는 것입니다. 어느 누구도 현재의 방법 인 ChildViewControllers에 반대되는 방법으로 효율성에 대한 생각을 갖고 있습니까?

또 다른 생각은 사용자 정의 ContainerViewController을 작성하고 거기에있는 모든 아이들을 들여다 볼 수 있다는 것이지만 UIScrollView에서 아이들을 사용하는 것보다 나에게 이점이 있는지 확실하지 않았습니다.

의견이 있으십니까?

+0

가장 좋은 방법은 '재사용 가능성'의 개념을 이어받는 것입니다. 컨테이너 클래스 일 수도 있고,''iITableView'와 같은 재사용 성 개념을 사용하여 ['iCarousel'] (https://github.com/nicklockwood/iCarousel) 구현을 볼 수도 있습니다. –

답변

5

개인적으로보기 컨트롤러가 아닌보기를 사용하도록 코드 리팩토링을 권장하지 않습니다. 뷰 컨트롤러 자체는 메모리 문제의 원인이 될 가능성이 적지 만 추적 대상 모델 개체 (뷰 컨트롤러의 뷰에서 사용하는 에셋)는 마찬가지입니다. 필자는 화면에서 스크롤 할 때보기 컨트롤러 (및보기)를 제거하는 것이 핵심이라고 생각합니다. 당신이보기에 스크롤 아이 뷰 컨트롤러를 추가하고, 당신은 아마도 적절한 봉쇄 통화의 모든 일을 당신의 스크롤 로직에서

는 :

UIViewController *newChildViewController = ... 
[self addChildViewController:newChildViewController]; 
newChildViewController.view.frame = ...; 
[self.scrollView addSubview:newChildViewController.view]; 
[newChildViewController didMoveToParentViewController:self]; 

(약에 대한 설명은 WWDC 2011 비디오 Implementing UIViewController Containment를 참조하십시오 이 포함 호출을 수행하는 것이 중요한 이유는 뷰 컨트롤러 계층 구조를 뷰 계층 구조와 동기화 된 상태로 유지하는 것입니다. 자식 뷰가 화면 밖으로 스크롤하면 적절한 포함 호출을 수행하여 자식 컨트롤러를 제거합니다. 그 견해) :

,451,515,
[childViewControllerToRemove willMoveToParentViewController:nil]; 
[childViewControllerToRemove.view removeFromSuperview]; 
[childViewControllerToRemove removeFromParentViewController]; 
// also remove any other strong references you have to that childViewControllerToRemove 

다른 방법으로는 transitionStyle 페이지 뷰 (UIPageViewControllerTransitionStyleScroll을) 두루 말기 UIPageViewController (아이폰 OS를 6+)를 사용하여 찬찬히 제공 할 수 있습니다. 이렇게하면보기 내부 및 외부로 스크롤되는보기 컨트롤러를 처리하기 위해 작성해야하는 사용자 정의 컨테이너 코드의 양이 간단 해집니다.UIPageViewController은 여러 뷰 컨트롤러 뷰를 통해 스크롤링 (또는 페이징)하는 이런 상황에 맞게 설계되었습니다. iOS 용 컨트롤러 카탈로그보기 에서 Page View Controllers 토론을 참조하십시오.

0

나는이 모든 것을 움직여야한다고 생각하지 않는다. UIView 님의 도움이 될 것입니다. 기술적으로 이것을 childView로 추가하지 않고 aChildViewController.view을 추가하면이 동일한 효과를 얻을 수 있습니다. 보기의로드를 UIScrollView에 최적화 할 것입니다. 한 번에 4 개의보기가 메모리에로드되었다고 말하십시오. 또 다른 옵션은 가로형 UITableView 또는 UICollectionView을 사용하여 빌드 한 메모리 관리 기능을 얻을 수 있도록하는 것입니다.

0

테이블 뷰로 전환하여 셀 대기열에서 빼내도록 할 수 있습니다. 당신은 한 번에 기억에 몇 가지있을 것입니다.