2013-04-01 11 views
6

W moim projekcie używam UIPageControl jako kontenera UIViewController do przewijania. Użyłem tego samouczka (używając ARC i storyboardów): http://www.wannabegeek.com/?p=168 i kodu źródłowego: https://github.com/wannabegeek/PageViewController Jak widać, w projekcie są 3 ViewControllers i są one dodawane jako dziecko na CustomPagerViewController. W tym projekcie są dodawane tylko 3 ViewControllers, ale w moim projekcie uzyskałem więcej niż 3 ViewControllers i ponownie wykorzystuję je z innym tekstem, obrazem, etykietą itp. Problem polega na tym, że w projekcie wszystkie te ViewControllers są ładowane po załadowaniu CustomPagerViewController i to kosztuje pamięć, więc szukam innego sposobu, jak poradzić sobie z tym problemem, zamiast ładować je wszystkie naraz?Alternatywny sposób ładowania kontrolek ViewControllers na UIPageControl

+0

zobacz ten link może ci pomóc. http://stackoverflow.com/questions/2942636/how-can-i-change-the-color-of-pagination-dots-of-uipagecontrol – Tirth

+0

Szukam sposobu, w jaki mogę umieścić kontroler widoku na UIPageControl bez dodawania ich wszystkich jako elementów potomnych, ponieważ zajmuje to dużo pamięci ... –

+0

Zanim dodaję odpowiedź: Czy używasz obrazów we wszystkich trzech widokach, jeśli tak, jak duże są? Co mówi Instruments o wszystkich alokacjach w twojej implementacji aplikacji. –

Odpowiedz

0

Nie należy próbować optymalizować alokacji sterownika w ten sposób. Oczywiście zachowanie kontrolerów widoku w pamięci zajmuje miejsce, ale wierzcie mi, nie tak bardzo.

Musimy tutaj odróżnić kontroler od widoku. Widoki mogą zająć dużo pamięci, aby wyświetlić się na ekranie, ale iOS ma już własne mechanizmy umożliwiające zwolnienie tej pamięci, gdy nie jest już wymagana (np. Widok nie jest na ekranie/nie ma okna) .

Kontrolery widoku iOS używane do samodzielnego zwolnienia widoku pamięci (to zachowanie było w [UIViewControllers didReceiveMemoryWarning]), ale nie jest tak już w iOS 6. Teraz jesteś odpowiedzialny za to, że czujesz, że jest to potrzebne Twoja aplikacja. Pamiętaj, że pomimo nilowania tych widoków w tej metodzie (lub dealloc), nie zaoszczędzisz dużo pamięci, ponieważ większość zasobów (graficznych) używanych do wyświetlania widoku na ekranie mogła już zostać wydana przez iOS, i ilość pamięci, którą możesz uwolnić, bliska 0.

Podsumowując, w twoim przypadku zamieniłbym PagerViewController na odpowiedni kontroler kontenera iOS, używając this guide. Kluczem jest połączenie następujących metod:

[UIViewController addChildViewController:] 
[UIViewController willMoveToParentViewController] 
[UIViewController removeFromParentViewController] 
[UIView addSubview:] 
[UIView removeFromSuperview] 

w odpowiedniej kolejności w zależności od potrzeb. W twoim przypadku możesz dodać/usunąć je w metodzie scrollViewDidScroll. Użyj ich w ten sposób i pozwól magii Apple się wydarzyć.

Równie dobrze można użyć funkcji UIPageViewController, która zapewnia przyjemne, gotowe do użycia funkcje.

Powiązane problemy