Objective-Cの弱いキーを持つActionScript 3のDictionary
オブジェクトに類似したものがあるかどうかは疑問です。私はクラスのインスタンスを他の任意のインスタンスに「アタッチ」できるようにしたい。Objective-Cのweak-keyed dictionary
例;
MetaData *meta = [MetaData metaDataForObject:someObject];
meta.whatever = foo;
以降:
foo = [MetaData metaDataForObject:someObject].whatever;
[foo doStuff];
トリッキーな部分はsomeObject
によって参照反対した後、私は仮定し、meta
によって参照されるオブジェクトは解放(およびdealloc'dしたいdealloc'dされていることですクライアントコードはそれを保持していません)。
可能ですか?私は+[NSValue valueWithNonretainedObject:]
を見ましたが、これは私が後でクエリを行うときに私が欲しいものであるかどうかわかりません-[NSValue nonretainedObjectValue]
それはオブジェクトがdealloc'dされたときにどのようにNSValueゼロのポインタを得ることができますか? )。
おかげで、
ベンジャミン
アップデート2011年9月23日:私はこれを行う方法はobjc_setAssociatedObject
と関連する関数であると考えています。 Objective-C Runtime Referenceを参照してください。
方法swizzlingはかなりまっすぐに聞こえる。あなたが言及したisa-swizzlingテクニックを詳しく説明できますか?私がそれを理解すると、オブジェクトのクラスを効果的に変更することができ、
dealloc
という新しい実装が提供されます。 – bvanderveenはい、そうです。 –
また、10.5にはこのために使用できる関数があります。これは今後の方が望ましいことです:http://developer.apple.com/DOCUMENTATION/Cocoa/Reference/ObjCRuntimeRef/Reference/reference.html#//apple_ref/ c/func/object_setClass –