2012-01-19 5 views
5

buduję aplikację z UINavigationController gdzie wcisnąć UIViewControllers i IBActions na jednej z klas może powodować inne wystąpienie pierwszego typu musi być odłożony:Czy złe praktyki pozwalają kontrolerowi UINavigationController przesyłać kontrolery widoku, które mogą prowadzić do powtarzania stosu?

ViewControllerType1 -> ViewControllerType2 -> ViewControllerType3 - -> ViewControllerType1

Jak widać, możliwe jest, że nie ma on "końca" stosu.

Czy ta zła praktyka ma taki niekończący się cykl? Czy należy używać stosu UINavigationController z "końcem"?

+0

Dobrym przykładem może być aplikacja YouTube - możesz przejść do niekończących się podobnych filmów. Próbowałem wtedy i jest co najmniej dwadzieścia, ale jestem prawie pewien, że nie ma limitu softcoded. – darvids0n

+0

Po prostu wyglądam i Twitter też to robi. Tweet -> Profil autora -> Autor Tweets -> Oryginalny Tweet – barfoon

Odpowiedz

3

Dobrze jest pozwolić na "cykl", jeśli tego oczekuje użytkownik.

Jeśli oczekujesz (i chcesz zezwolić) użytkownikowi na tworzenie głębokich stosów, powinieneś spróbować zminimalizować ilość stanu prywatnego w każdym kontrolerze widoku. Na przykład, jeśli dwa kontrolery widoku na stosie pokazują te same informacje użytkownikowi, powinieneś uczynić oba kontrolery widoku współdzielić ten sam obiekt bazowy, przechowujący te informacje.

Powinieneś również upewnić się, że każdy kontroler widoku zwalnia jak najwięcej, jeśli odbiera didReceiveMemoryWarning message (jeśli ten kontroler widoku nie znajduje się na wierzchu stosu).

+0

Jedną z zaawansowanych sztuczek (która może nie być całkowicie pożądana) byłoby sprawdzenie podczas wyświetlania listy elementów 'ViewControllerType1', które nie są wyświetlane z tych w bieżącym stosie kontrolerów nawigacyjnych. W ten sposób użytkownik (który jest świadomy tego, które elementy on/ona oglądał) może kontynuować, ale Ty także gwarantujesz, że stos jest unikalny, a więc jest mniej prawdopodobne, że będzie nadmiarowe lub niepożądane zachowanie. – darvids0n

0

Powiedziałbym, że nie jest to najlepsza praktyka - przywraca to nawigację raczej, jeśli nie zaimplementujesz funkcji, które wyskakują do rdzenia lub przynajmniej nisko w hierarchii.

Również z mojego doświadczenia nie powinieneś absolutnie ufać, że liczba zatrzymań tak skonfigurowanych kontrolerów jest obliczana poprawnie - już raz próbowałem podobnego podejścia, a pojawienie się kontrolera widoku spowodowało, że został zwolniony, a technicznie nadal stos.

Również - pod względem zasobów jest to okropne - nie masz pojęcia, ilu kontrolerów widoku może mieć.