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
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. –
implementare - (void) didReceiveMemoryWarning. Questo è il metodo che viene chiamato quando la tua app utilizza troppa memoria. – MJB
Come stai implementando il comportamento del pulsante Indietro? Puoi pubblicare il codice per questo? – Jim