2010-09-13 13 views

risposta

29

Le normali semantica di copy e mutableCopy sono di restituirvi un oggetto conservato, proprio come la creazione di una nuova via alloc/init avrebbe. Non aumentano il conteggio dei riferimenti dell'oggetto da copiare, se è quello che stai chiedendo. Dal NSObject documentation per copy:

Se si utilizza memoria gestita (non garbage collection), questo metodo mantiene il nuovo oggetto prima di restituirlo. L'invocatore del metodo, tuttavia, è responsabile del rilascio dell'oggetto restituito.

+6

+1, tranne che in alcune circostanze ("copia" di un oggetto immutabile, ad esempio), invocando "copia" può solo incrementare il conteggio di ritenzione e restituire lo stesso oggetto. (tuttavia, le stesse regole di gestione della memoria si applicano ancora, ovviamente) –

+0

+1 @Dave, assolutamente vero. Non c'è alcuna differenza pratica per il chiamante, però. –

+4

Ancora più importante, il conteggio dei ritardi preciso è un dettaglio di implementazione a cui il programmatore non dovrebbe pensare. Quando "copi", puoi trattarlo come un nuovo oggetto con un conteggio di ritenzione pari a 1 in qualsiasi programma corretto. Il conteggio dei ritiri effettivi non è essenzialmente affar nostro. – Chuck