2011-01-04 2 views
1

Wenn ich eine 2-dimensionale NSMutableArray zBIst NSMutableArray bei der Freigabe seiner Elemente rekursiv?

board = [[NSMutableArray alloc] initWithCapacity:boardHeight]; 
for (int y = 0; y < boardHeight; y++) { 
    NSMutableArray *row = [[NSMutableArray alloc] initWithCapacity:boardWidth]; 

    for (int x = 0; x < boardWidth; x++) { 
     [row insertObject:@"A string"];    
    } 

    [board insertObject:row atIndex:y]; 
    [row release]; 
} 

und ich

[board release]; 

entbindet, dass rekursiv das Array? Oder muss ich manuell in das Array gehen und jede Zeile freigeben?

Wenn dies der Fall ist und das Objekt, das in jede Zeile eingefügt wurde, ein benutzerdefiniertes Objekt ist, gibt es etwas Besonderes, an das ich beim Schreiben der Dealloc-Methode für das benutzerdefinierte Objekt denken muss?

Antwort

4

Alles wird einfach gut funktionieren. Das Array behält die Objekte bei, wenn sie hinzugefügt und freigegeben werden, wenn sie entfernt oder das Array freigegeben wird.

Keine zusätzlichen Arbeiten an diesem Teil.

1

Wenn board bereit ist, die Zuordnung aufzuheben, wird die Nachricht release an jedes Objekt gesendet. Selbst wenn diese Objekte NSArray s sind, werden sie immer noch release d; und wenn diese Arrays jetzt bereit sind, aufgehoben werden, werden sie release an ihre Mitglieder, usw.

Ihre Klasse dealloc senden normalerweise implementieren sollten - release alle ivars, dass Sie eine starke Referenz halten, um vor [super dealloc] Aufruf.

Verwandte Themen