2009-11-03 13 views

risposta

14

NSMutableArray lo rilascia. Se questo è l'ultimo trattenere, sarà deallocato. Dalla documentazione:

Come NSArray, le istanze di NSMutableArray mantengono forti riferimenti al loro contenuto. Se non si utilizza la garbage collection [Jed: l'iPhone non], quando si aggiunge un oggetto a un array, l'oggetto riceve un messaggio di conservazione. Quando un oggetto viene rimosso da un array mutabile, riceve un messaggio di rilascio. Se non ci sono ulteriori riferimenti all'oggetto, ciò significa che l'oggetto è deallocato. Se il tuo programma mantiene un riferimento a tale oggetto, il riferimento diventerà non valido a meno che tu non invii all'oggetto un messaggio di conservazione prima di essere rimosso dall'array.

Vedere NSMutableArray documentation. Loro esempio, infatti, si riferisce a removeObjectAtIndex::

id anObject = [[anArray objectAtIndex:0] retain]; 
[anArray removeObjectAtIndex:0]; 
[anObject someMessage]; 
+0

Se l'oggetto è direttamente privo dell'indice, ciò vale anche per questo? [[anObject retain] autorelease]; [arrayOfObjects removeObject: anObject]; – Frank

+0

@Frank: Sì, lo farebbe. –

3

Sì, quando l'oggetto viene rimosso da NSMutableArray, viene rilasciato. Se il suo numero di retain è 0, sarà deallocato (o garbage collection, se invece fossi in esecuzione su OS X con GC abilitato).

5

Sì. Le raccolte conservano i valori che raccolgono quando i valori vengono aggiunti alla raccolta, il che significa che i valori vengono rilasciati quando vengono rimossi dalla raccolta.

0

Come tutti hanno detto, l'oggetto di un NSMutableArray viene rilasciato dopo averlo estratto dalla matrice.

Se non si desidera rilasciare l'oggetto, conservarlo appena prima di chiamare il metodo remove object. In questo caso, sei responsabile per il rilascio successivo:

MyClass *objectToBeRemoved=[myArray objectAtIndex:indexPath.row]; 
[objectToBeRemoved retain]; 
[myArray removeObject:objectToBeRemoved]; 
Problemi correlati