Cela dépend de ce que myObject
est réellement et comment vous avez ses propriétés définies. En supposant que vous les avez définis pour libérer comme ici:
@property (nonatomic, retain) SomeClass *myProperty;
alors oui, vous pouvez le faire. Les setters sont synthétisés automatiquement pour vous par la version objective-c et mis à zéro les anciennes valeurs des propriétés avant de conserver et d'assigner de nouvelles valeurs.
Cependant, bien qu'il n'y ait aucun problème avec votre gestion de la mémoire, il y a toujours un problème avec votre code. Rappelez-vous que myObject
est un pointeur, tout comme en C ou C++. Cela signifie que si vous l'ajoutez à myDic
, puis modifiez les propriétés de l'objet ultérieurement (par exemple lors de la prochaine itération de votre boucle for), ces modifications seront répercutées lorsque vous extrayez l'objet du dictionnaire à un moment donné dans le avenir. Ce que vous voulez est quelque chose comme ceci:
myObject = nil
myDict = new Dictionary
for(int i; i < 10;i++)
myObject = new Object
myObject.value1 = new data from somewhere
myObject.value2 = new data from somewhere
myDic setValue:myObject forKey:i
myObject release
end for
Qu'est-ce que cela ne fait libérer myObject
après avoir mis dans le dictionnaire (toutes les classes de collecte de cacao conservent tous les objets que vous mettez en eux et libérer les objets quand ils sont enlevés ou la la collection elle-même est désallouée) donc vous n'avez pas de fuite, ainsi que d'allouer une nouvelle instance de Object
à chaque itération afin de ne pas modifier le même objet encore et encore.
Si vous n'avez pas lu Apple Memory Management Guide for Cocoa, je recommande fortement de le faire. C'est très instructif.
Que publieriez-vous pendant la boucle? Toutes les données (clés, valeurs et dictionnaire lui-même) sont toujours utilisées. –