2010-11-29 14 views
0

Est-ce que la ligne suivante fuit cet objet [[NSMutableDictionary alloc] init]?L'ajout d'un objet alloc'd non référencé à la collection peut-il provoquer une fuite?

[myCollection setObject:[[NSMutableDictionary alloc] init] forKey:@"myDictionary"];

Je suppose que ce ne pas parce que l'objet est jamais attribué à une référence ... mais en même temps, je remets en question parce que je n'Alloc l'objet ...

Est-ce que le suivant le travail comme une alternative?

[myCollection setObject:[NSMutableDictionary dictionary] forKey:@"myDictionary"];

Répondre

2

Le premier fuira, le second ne sera pas.

Affecter une référence d'objet dans une variable n'affecte en rien la propriété de l'objet. Vous avez appelé alloc, ce qui signifie que vous en êtes le propriétaire, que vous capturiez ou non les résultats de cet appel. Si vous ne le faites pas, vous avez fui.

La deuxième option ([NSMutableDictionary dictionary]) ne fuira pas, car +dictionary renvoie un objet non détenu (autoreleased).

Donc, en un mot, votre intuition est correcte. Toutes nos félicitations! Beaucoup de gens qui posent des questions de gestion de la mémoire ici se trompent généralement. :)

+0

Merci! Juste besoin d'une petite confirmation :) –