CFMutableDictionaryを自動リリースするにはどうすればよいですか?
私はそれを次のように作成しています:
self.mappingByMediatedObject = CFDictionaryCreateMutable(NULL, 0, &kCFTypeDictionaryKeyCallBacks, &kCFTypeDictionaryValueCallBacks);
そしてdeallocで:
self.mappingByMediatedObject = nil;
CFMutableDictionaryを自動リリースするにはどうすればよいですか?
私はそれを次のように作成しています:
self.mappingByMediatedObject = CFDictionaryCreateMutable(NULL, 0, &kCFTypeDictionaryKeyCallBacks, &kCFTypeDictionaryValueCallBacks);
そしてdeallocで:
self.mappingByMediatedObject = nil;
CoreFoundation には自動解放の概念がありません。これは Cocoa レベルの構造です。ただし、文字列やコレクション クラスなどの世界にまたがる「通話料無料」-autorelease
のオブジェクトについては、CF 参照を対応する Cocoa 参照にキャストし、次のようにメッセージを送信することで同じ結果を得ることができます。
[(NSDictionary *)aDictionaryRef autorelease];
ただし、あなたのケースでは、Cocoa 呼び出し元の参照を返していないため、ここで autorelease を使用したくない場合があります。代わりに、次のように、割り当てをもう少し明確にして、設定後に解放してください。
CFDictionaryRef mapping = CFDictionaryCreateMutable(NULL, 0, &kCFTypeDictionaryKeyCallBacks, &kCFTypeDictionaryValueCallBacks);
self.mappingByMediatedObject = mapping;
CFRelease(mapping);
CFDictionary
NSDictionary
フリーダイヤルでブリッジされています。これは、CoreFoundationオブジェクトとそれに対応するCocoaが交換可能であることを意味します。
したがって、を自動リリースするCFDictionary
には、次のように記述できます。
CFDictionary dict = CFDictionaryCreateMutable(...);
self.mappingByMediatedObject = dict;
[(NSDictionary*)dict autorelease];
もちろん、mappingByMediatedObject
プロパティがその値を保持している場合にのみ辞書を自動解放します(@property(retain)
)
iOS7 および Mac OS X 10.9 以降では、Core-Foundation 自動解放関数 CFAutorelease() を使用できます。