2009-11-03 18 views

Odpowiedz

14

Arkusz NSMutableArray go zwolni. Jeśli to jest ostatnie zatrzymanie, zostanie zwerbalizowane. Z dokumentacji:

Podobnie jak w przypadku NSArray, wystąpienia NSMutableArray zawierają silne odniesienia do ich zawartości. Jeśli nie używasz zbierania śmieci: [Jed: iPhone nie], po dodaniu obiektu do tablicy, obiekt odbiera komunikat zatrzymania. Kiedy obiekt jest usuwany z tablicy zmiennych, otrzymuje komunikat zwolnienia. Jeśli nie ma dalszych odniesień do obiektu, oznacza to, że obiekt został zwolniony. Jeśli twój program zachowuje odniesienie do takiego obiektu, odwołanie stanie się nieważne, chyba że wyślesz obiekt do zatrzymania, zanim zostanie on usunięty z tablicy.

Zobacz NSMutableArray documentation. Ich przykładem, w rzeczywistości odnosi się do removeObjectAtIndex::

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

Jeśli mamy obiekt bezpośrednio bez indeksu, czy to również ma zastosowanie? [[Zatrzymaj anObject] autorelease]; [arrayOfObjects removeObject: anObject]; – Frank

+0

@Frank: Tak, to by było. –

3

Tak, po usunięciu obiektu z obiektu NSMutableArray następuje jego zwolnienie. Jeśli jego wartość zatrzymania wynosi 0, zostanie zwolniona (lub zostanie pobrana śmieciarka, jeśli zamiast tego uruchomiono system OS X z włączoną opcją GC).

5

Tak. Kolekcje zachowują wartości, które zbierają, gdy wartości są dodawane do kolekcji, co oznacza, że ​​wartości są zwalniane, gdy zostaną usunięte z kolekcji.

0

Ponieważ każdy ma wspomniano, przedmiotem NSMutableArray uwalnia się po usunięciu z matrycy.

Jeśli nie chcesz zwolnić obiektu, zatrzymaj go tuż przed wywołaniem metody usuwania obiektu. W takim przypadku odpowiadasz za jego późniejsze wydanie:

MyClass *objectToBeRemoved=[myArray objectAtIndex:indexPath.row]; 
[objectToBeRemoved retain]; 
[myArray removeObject:objectToBeRemoved]; 
Powiązane problemy