Question

Je travaille sur une application iPhone qui construira, au moment de l'exécution, un NSMutableDictionary pour lequel les valeurs (des paires clé-valeur) sera NSMutableArrays. Être un peu nouveau pour l'Objective-C, je crains que ce qui suit provoque une fuite de mémoire:

- (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 est un NSMutableDictionary, qui est une variable membre de la classe contenant.

Comme vous pouvez le voir, quand j'accepte un nouveau UIImage * de mettre dans la structure, je vérifie d'abord si l'objet à la paire clé-valeur correspondant au second argument (SupplierID) est nul. Si elle est nulle, j'alloc un nouveau NSMutableArray et le définir comme l'objet de cette touche, puis relâchez. En supposant que je dealloc le NSMutableDictionary dans le dealloc de la classe contenant cette méthode, les références seront libérés? Avant dealloc-ment le NSMutableDictionary, dois-je courir à travers et dealloc les NSMutableArrays individuelles contenues dans?

Merci,

Ben B.

Était-ce utile?

La solution

lorsque vous ajoutez des objets dans un récipient comme le dictionnaire ou un tableau, Fidéliser sera appelé automatiquement, et lorsque vous relâchez le récipient que votre question, il est le dictionnaire, il appellera « libération » de chaque objet à dealloc la mémoire de l'objet.

Autres conseils

cette gestion de la mémoire semble correct pour moi. Vous libérez une copie que vous avez alloc'd, et le tableau contient une autre référence une fois que vous ajoutez à cela, de sorte que le nombre net est 1 qui est correct.

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top