Je me demande s'il est possible d'avoir quelque chose de similaire à l'objet Dictionary
d'ActionScript 3 avec des touches faibles dans Objective-C. Je veux pouvoir "attacher" une instance d'une classe à d'autres instances arbitraires.Dictionnaires faibles en Objective-C
Exemple;
MetaData *meta = [MetaData metaDataForObject:someObject];
meta.whatever = foo;
Et plus tard:
foo = [MetaData metaDataForObject:someObject].whatever;
[foo doStuff];
La partie délicate est que, après l'objet de l'opposition référencée par someObject
est dealloc'd, je veux l'objet référencé par meta
à être libéré (et dealloc'd, en supposant aucun code client ne l'a retenu).
Possible? J'ai jeté un coup d'oeil à +[NSValue valueWithNonretainedObject:]
mais je ne suis pas sûr si c'est ce que je veux parce que là quand je questionnerai plus tard -[NSValue nonretainedObjectValue]
il semblerait que j'obtiendrais un pointeur à la poubelle (comment NSValue pourrait-il zéro le pointeur quand l'objet a été dealloc'd?).
Merci,
benjamin
mise à jour 23 Septembre 2011: Je crois que la façon de le faire est avec objc_setAssociatedObject
et fonctions connexes. Voir le Objective-C Runtime Reference.
Méthode swizzling semble assez simple. Pouvez-vous développer la technique isa-swizzling dont vous avez parlé? Si je comprends bien, cela me permettrait de changer efficacement la classe de l'objet, fournissant ainsi une nouvelle implémentation de
dealloc
, correct? – bvanderveenOui, c'est correct. –
Notez également que dans 10.5 il y a une fonction que vous pouvez utiliser pour cela, ce qui est préférable à l'avenir: http://developer.apple.com/DOCUMENTATION/Cocoa/Reference/ObjCRuntimeRef/Reference/reference.html#//apple_ref/ c/func/object_setClass –