Sto guardando un codice open source e sto cercando di capire perché l'autore ha fatto qualcosa in un modo particolare.Qual è il punto in un fermo immediatamente seguito da un autorelease?
La classe è un involucro intorno NSArray
per creare una struttura di dati stack con spinta, pop, ecc
Un metodo è topObject
che restituisce l'oggetto superiore nella pila e la sua attuazione è:
- (id)top {
return [[[stack lastObject] retain] autorelease]; // stack is an instance of NSMutableArray
}
Che cos'è il retain seguito da un'autelease immediato?
La mia prima reazione è stata che questo avrebbe impedito un avvertimento dell'analizzatore su una perdita di memoria, ma ho analizzato senza il mantenimento/autorelease e non c'era ancora alcun avviso.
Guardando al ciclo di vita, un oggetto verrebbe creato, inserito nello stack e rilasciato, quindi lo stack possiede l'oggetto (l'array sottostante lo manterrà all'aggiunta).
Quindi non capisco l'uso del mantenere/autorelease qui ...
Ha senso, grazie. – Jasarien
Non è ancora corretto farlo imho. La guida alla programmazione della gestione della memoria afferma "Proprio come non dovresti preoccuparti del conteggio di conservazione effettivo di un oggetto, non dovresti preoccuparti del fatto che un oggetto restituito sia autorizzato o meno. L'unica preoccupazione è che ne possiedi o non." - quindi la conservazione + autorelease dovrebbe avvenire nel foo = [bar top]; linea, non nel metodo - (id) top {}. –
Risposta ben spiegata. –