ARC が有効になっている OS X 10.7 で、弱参照(つまり、辞書はキーと値を保持しない) を持つオブジェクトの辞書を作成するにはどうすればよいですか? NSMapTable は有望に見えますが、残念ながら、ARC が有効になっている場合は弱参照を使用しません。
1 に答える
NSMapTable はまさにあなたが望むものです。
10.8 以降:
特にあなたの場合、これを使いたいようです:
+ (id)weakToWeakObjectsMapTable 戻り値 キーと値への弱い参照を持つ新しいマップ テーブル オブジェクト。
ドキュメントから:
主なオプションは、オブジェクトの 1 つが回収されたときにエントリが削除されるように、キーや値を「弱く」保持することです。
ショートカット クラス メソッドを使用するか、+ (id)weakToWeakObjectsMapTable
必要+ (id)weakToStrongObjectsMapTable
に応じて使用できます。
NSMapTableOptions
他の初期化子に動作を指定する方法についても参照してください。
NSMapTableWeakMemory ARCまたは GC
に適した弱い読み取りおよび書き込みバリアを使用します。NSPointerFunctionsWeakMemory オブジェクト参照を使用すると、最後のリリースで NULL になります。NSMapTableZeroingWeakMemory に等しい。
10.7+:
オプションを使用– initWithKeyOptions:valueOptions:capacity:
して渡すNSMapTableZeroingWeakMemory
(オブジェクトが「弱い参照セーフ」であると仮定)代わり– initWithKeyPointerFunctions:valuePointerFunctions:capacity:
に、組み込み関数が機能しない場合、またはバージョンで使用できない場合は、カスタム関数を使用して指定できます。(おそらく、「不透明な」性格の1つがあなたのために働くでしょう)