Domanda

Sto lavorando su un'applicazione per iPhone che costruirà, a run-time, un NSMutableDictionary per i quali i valori (delle coppie chiave-valore) sarà NSMutableArrays. Essere un po 'nuovo al Objective-C, sono preoccupato che il seguente causerà una perdita di memoria:

- (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 è un NSMutableDictionary, che è una variabile membro della classe contenente.

Come si può vedere, quando sto accettando un nuovo UIImage * di mettere nella struttura, che per prima cosa controllare per vedere se l'oggetto alla coppia chiave-valore corrispondente al secondo argomento (ID fornitore) è pari a zero. Se è pari a zero, ho alloc un nuovo NSMutableArray e impostarlo come l'oggetto per quel tasto, quindi rilasciarlo. Supponendo che ho dealloc il NSMutableDictionary nel dealloc della classe che contiene questo metodo, saranno i riferimenti rilasciati? Prima dealloc-ing l'NSMutableDictionary, ho bisogno di correre attraverso di essa e dealloc singoli NSMutableArrays contenute all'interno?

Grazie,

Ben B.

È stato utile?

Soluzione

quando si aggiungono oggetti in un contenitore come dizionario o un array, mantenere verrà richiamato automaticamente, e quando si rilascia il contenitore come la tua domanda è dizionario, si chiamerà 'rilascio' di ogni oggetto per dealloc memoria dell'oggetto.

Altri suggerimenti

Questa gestione della memoria è corretto per me. Si rilascia l'una copia che hai alloc'd, e la matrice detiene un altro riferimento una volta aggiunto ad esso, in modo che il conteggio netto è 1 che è corretto.

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top