6

Sono su un progetto iPhone utilizzando ARC. L'applicazione è basata sulla navigazione, utilizzando UINavigationController.Quando si impostano gli oggetti su zero quando si utilizza ARC?

Il caso di utilizzo tipico è passare da uno "principale" UIViewController a uno "secondario" UIViewController più volte, forse fino a 100 volte. Il controller secondario ha un sacco di immagini statiche, PNG locali, alcune delle quali ripetute.

Sto analizzando l'applicazione e posso vedere come, quando si passa dal controller "principale" a quello "secondario", alloca circa 0,8 MB, ma, quando si preme il pulsante Indietro, non libera la memoria. Così, quando vado di nuovo al controller secondario, altri 0,8 MB sono assegnati, e così via ...

debug, ho notato che viewDidUnload: metodo della secondaria UIViewController non è mai stato chiamato, ma ho anche letto che è così metodo in cui dovrei impostare a zero i riferimenti mantenuti dal controller. Fare questo in viewDidDisappear: non aiuta, perché voglio che si verifichi solo quando si preme il pulsante indietro, cioè quando si apre il controller dallo stack (il metodo viewDidDisappear: viene chiamato anche quando si preme un altro controller nello stack).

Quindi le domande sono: c'è dove devo farlo? Posso forzare questo metodo per essere chiamato? Questo comportamento è OK (profilazione, le allocazioni sono aumentate fino a 20 MB dopo alcuni cicli di "main" -> "secondary" -> "main" -> "secondary" -> ...) ??

Grazie a tutti in anticipo

+0

ARC fondamentalmente viene utilizzato per il rilascio automatico dell'oggetto. È possibile creare un nuovo prohject disattivando l'ARC in modo da poter rilasciare manualmente gli oggetti. –

+0

implementare - (void) didReceiveMemoryWarning. Questo è il metodo che viene chiamato quando la tua app utilizza troppa memoria. – MJB

+0

Come stai implementando il comportamento del pulsante Indietro? Puoi pubblicare il codice per questo? – Jim

risposta

1

ARC è solo utilizzato per ridurre il codice e gestire la memoria interna. Per ulteriori dettagli, consultare il tutorial qui sotto in modo da essere in grado di comprendere i concetti più facilmente.

Understanding Automatic Reference Counting in Objective-C

Spero che questo potrebbe aiutare.

+0

In effetti fa come aumentare il mio know-how su ARC, grazie, +1 per quello! Ma non risolve il mio problema, ho solo bisogno di, in qualche modo, dire a iOS che l'istanza di quel controller secondario, ogni volta che l'utente preme il pulsante Indietro, scoccandola dallo stack di navigazione, non sarà più utilizzata. – sonxurxo

Problemi correlati