Frage

Ich arbeite an einem iPhone-App, die zur Laufzeit wird konstruieren, ein NSMutableDictionary für die die Werte (der Schlüssel-Wert-Paare) werden NSMutableArrays sein. Als etwas neu in das Objective-C, ich bin besorgt, dass die folgende einen Speicherverlust verursachen:

- (void) addNewSupplierPhoto:(UIImage*)image toSupplierID:(NSInteger*) supplierID{
NSMutableArray* supplierPhotoArray = [supplierPhotos objectForKey:supplierID];
if(supplierPhotoArray == nil)
{
    supplierPhotoArray = [[NSMutableArray alloc] init];
    [supplierPhotos setObject:supplierPhotoArray forKey:supplierID];
    [supplierPhotoArray release];
}
}

supplierPhotos ist ein NSMutableDictionary, die ein Mitglied enthält, Variable der Klasse ist.

Wie Sie sehen können, wenn ich eine neue UIImage bin zu akzeptieren * in die Struktur setzen, überprüfe ich, zuerst zu sehen, ob das Objekt an dem Schlüssel-Wert-Paar mit dem zweiten Argumente entspricht (supplierID) gleich Null ist. Wenn es gleich Null ist, ich alloc eine neue NSMutableArray und legen Sie es als das Objekt für diesen Schlüssel, dann los. Unter der Annahme, ich die NSMutableDictionary in der dealloc der Klasse dealloc diese Methode enthält, werden die Verweise freigegeben? Vor dealloc-ing der NSMutableDictionary, muss ich durch sie laufen müssen und dealloc die einzelnen NSMutableArrays darin enthaltenen?

Danke,

Ben B.

War es hilfreich?

Lösung

, wenn Sie Objekte in einen Container wie Wörterbuch oder Array hinzufügen, retain wird automatisch aufgerufen werden, und wenn Sie den Container als Ihre Frage Wörterbuch der es loslassen, wird es nennen ‚Freisetzung‘ jedes Objekt im Speicher des Objekts dealloc.

Andere Tipps

Diese Speicherverwaltung scheint mir richtig. Sie geben die ein Kopieren Sie alloc'd haben, und das Array hält eine weitere Referenz, wenn Sie ihm hinzufügen, so dass die Nettoanzahl ist 1, die korrekt ist.

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top