2012-01-19 5 views
5

Sto costruendo un app con un UINavigationController dove ho spingere un UIViewControllers, e IBActions su una delle classi può causare un altro esempio del primo tipo da spingere:È una cattiva pratica consentire a un UINavigationController di spingere i controller di visualizzazione che potrebbero portare a uno stack ripetuto?

ViewControllerType1 -> ViewControllerType2 -> ViewControllerType3 - -> ViewControllerType1

Come si può vedere, è possibile non avere 'fine' allo stack.

Questa cattiva pratica ha un ciclo infinito come questo? Uno stack UINavigationController dovrebbe essere usato pensando a una "fine"?

+0

Un buon contro-esempio potrebbe essere l'app YouTube: è possibile passare a video correlati senza fine. Ho provato allora ed è almeno una ventina, ma sono abbastanza sicuro che non ci sia un limite di softcoded. – darvids0n

+0

Ho appena guardato e anche Twitter lo fa. Tweet -> Profilo dell'autore -> Tweet dell'autore -> Tweet originale – barfoon

risposta

3

Va bene consentire un "ciclo" se questo è ciò che l'utente si aspetta.

Se si prevede (e si desidera consentire) all'utente di creare stack profondi, è necessario provare a ridurre al minimo la quantità di stato privato in ciascun controller di visualizzazione. Ad esempio, se due controller di vista sullo stack mostrano entrambe le stesse informazioni all'utente, è necessario che entrambi i controller di vista condividano lo stesso oggetto sottostante che contiene tali informazioni.

È inoltre necessario assicurarsi che ciascun controller di visualizzazione rilasci il più possibile, se riceve il didReceiveMemoryWarning message (se il controller di visualizzazione non è in cima allo stack).

+0

Un metodo avanzato di tricksy (che potrebbe non essere del tutto auspicabile) consisterebbe nel controllare quando viene visualizzato un elenco di elementi di 'ViewControllerType1' che non vengono visualizzati di quelli nello stack del controller nav corrente. In questo modo l'utente (che presumibilmente è a conoscenza degli oggetti che ha guardato) può andare avanti, ma si garantisce anche che lo stack sia unico e quindi è meno probabile che sia ridondante nello spazio o comportamento indesiderato. – darvids0n

0

Direi che questa non è la migliore pratica - rende la navigazione piuttosto ingombrante a meno che non si implementino funzioni che compaiono come root o almeno nella gerarchia.

Inoltre, dalla mia esperienza non dovresti essere assolutamente fiducioso che i conteggi di ritenzione di tali controller sono calcolati correttamente - Ho provato un approccio simile una volta e facendo scattare un controller di visualizzazione ne è risultato il rilascio mentre ancora tecnicamente lo stack.

Inoltre, per quanto riguarda le risorse, è orribile - non hai idea di quanti viewcontrollers potresti avere.

Problemi correlati