Dictionary
Objective-C で弱いキーを持つActionScript 3 のオブジェクトに似たものを持つことが可能かどうか疑問に思っています。クラスのインスタンスを他の任意のインスタンスに「アタッチ」できるようにしたいと考えています。
例;
MetaData *meta = [MetaData metaDataForObject:someObject];
meta.whatever = foo;
以降:
foo = [MetaData metaDataForObject:someObject].whatever;
[foo doStuff];
トリッキーな部分は、によって参照されるオブジェクトが解放された後、によってsomeObject
参照されるオブジェクトをmeta
解放したいということです (そして、クライアント コードがそれを保持していないと仮定して、解放します)。
可能?調べてみまし+[NSValue valueWithNonretainedObject:]
たが、後でクエリを実行-[NSValue nonretainedObjectValue]
すると、ガベージへのポインターを取得するように見えるため、これが必要かどうかわかりません (オブジェクトが解放されたときに NSValue がポインターをゼロにするにはどうすればよいでしょうか?)。
ありがとう、
ベンジャミン
2011 年 9 月 23 日更新:これを行う方法はobjc_setAssociatedObject
、関連する関数を使用することだと思います。Objective-C ランタイム リファレンスを参照してください。