Ich frage mich, ob es möglich ist, etwas ähnliches ActionScript 3 Dictionary
Objekt mit schwachen Schlüsseln in Objective-C zu haben. Ich möchte in der Lage sein, eine Instanz einer Klasse an andere beliebige Instanzen anzuhängen.Weak-Keyed-Wörterbuch in Objective-C
Beispiel;
MetaData *meta = [MetaData metaDataForObject:someObject];
meta.whatever = foo;
Und später:
foo = [MetaData metaDataForObject:someObject].whatever;
[foo doStuff];
Der schwierige Teil ist, dass nach dem von someObject
verweist widersprochen wird dealloc'd, ich will das Objekt durch meta
verwiesen freigegeben (und dealloc'd wird, unter der Annahme, kein Client-Code hat es beibehalten).
Möglich? Ich habe einen Blick auf +[NSValue valueWithNonretainedObject:]
, aber ich bin mir nicht sicher, ob das ist, was ich will, da dort, wenn ich später Abfrage -[NSValue nonretainedObjectValue]
es scheint, wie ich einen Zeiger auf Müll bekommen würde (wie konnte NSValue den Zeiger Null, wenn das Objekt dealloc'd wurde?).
Danke,
benjamin
Update 23. September 2011: Ich glaube, die Art und Weise dies mit objc_setAssociatedObject
und verwandten Funktionen zu tun. Siehe Objective-C Runtime Reference.
Methode Swizzling klingt ziemlich geradlinig. Können Sie die von Ihnen erwähnte Isa-Swizzling-Technik näher erläutern? So wie ich es verstehe, würde es mir erlauben, die Klasse des Objekts effektiv zu ändern, wodurch eine neue Implementierung von
dealloc
, korrekt? – bvanderveenJa, das ist richtig. –
Beachten Sie auch, dass es in 10.5 eine Funktion gibt, die Sie für diese Funktion verwenden können, die in Zukunft bevorzugt wird: http://developer.apple.com/DOCUMENTATION/Cocoa/Reference/ObjCRuntimeRef/Reference/reference.html#//apple_ref/ c/func/Objektgruppe –