Domanda

Sto usando un UINavigationController e ho problemi a rilasciare oggetti quando invio una nuova vista. Voglio impostare un oggetto sul nuovo controller prima di spingerlo. Il modo in cui lo sto facendo attualmente è:

OpenPageViewController *varOpenPageController = [[OpenPageViewController alloc] initWithNibName:@"OpenPageViewController" bundle:nil];
varOpenPageController.bookObj = bookObj;
[[self navigationController] pushViewController:varOpenPageController animated:YES];
//[varOpenPageController release];

Se rimuovo il commento sull'ultima riga, il programma si arresta in modo anomalo quando torno indietro attraverso il mio controller. Ho anche un'altra domanda su quando / come rilasciare un oggetto. Nel bookObj ho un array mutabile di oggetti Page e voglio cambiare il testo dell'oggetto pagina corrente. Lo faccio per:

Page *pageObj = [[bookObj pagesArray] objectAtIndex:currentPage];
pageObj.page_Text = textView.text;
[[bookObj pagesArray] replaceObjectAtIndex:currentPage withObject:pageObj];
//[pageObj release];

Il programma si arresta in modo anomalo se decomprimo anche quest'ultima riga. Mi permetterà di navigare in avanti, ma quando torno indietro e provo ad andare avanti di nuovo, si blocca.

Il rilascio automatico degli oggetti porta risultati simili. Si prega di avvisare se è possibile. Grazie.

EDIT: quando rilascio il primo esempio varOpenPageController ed eseguo il simulatore con Perdite, il programma sembra funzionare correttamente. Tuttavia, se non eseguo perdite, si blocca. Qualcuno ha qualche idea del perché ciò possa accadere? Grazie.

È stato utile?

Soluzione

Potrebbe essere necessario leggere il Apple Memory Management Document . Il secondo elemento non è necessario per rilasciare pageObj poiché contiene solo un riferimento all'elemento effettivo nell'array bookObj. Non è l'oggetto reale se questo ha senso. Quindi, in effetti, stai rilasciando l'oggetto reale dall'array, quindi quando torni indietro e provi ad accedervi, non è lì.

La regola empirica è: rilascia solo ciò che crei.

Altri suggerimenti

Il tuo primo esempio di inserimento del controller di visualizzazione nel controller di navigazione è corretto con il rilascio. Se questo si arresta in modo anomalo quando torni, probabilmente significa che hai qualcosa di sbagliato nel metodo dealloc di OpenPageViewController, ma qualcosa non va da qualche parte poiché il controller di navigazione mantiene il controller della vista e dovresti assicurarti di rilasciarlo dopo aver premuto (se hai ha assegnato l'istanza del controller di visualizzazione come nel codice).

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top