0

CFMutableDictionaryを自動リリースするにはどうすればよいですか?

私はそれを次のように作成しています:

self.mappingByMediatedObject = CFDictionaryCreateMutable(NULL, 0, &kCFTypeDictionaryKeyCallBacks, &kCFTypeDictionaryValueCallBacks);

そしてdeallocで:

self.mappingByMediatedObject = nil;
4

3 に答える 3

3

CoreFoundation には自動解放の概念がありません。これは Cocoa レベルの構造です。ただし、文字列やコレクション クラスなどの世界にまたがる「通話料無料」-autoreleaseのオブジェクトについては、CF 参照を対応する Cocoa 参照にキャストし、次のようにメッセージを送信することで同じ結果を得ることができます。

[(NSDictionary *)aDictionaryRef autorelease];

ただし、あなたのケースでは、Cocoa 呼び出し元の参照を返していないため、ここで autorelease を使用したくない場合があります。代わりに、次のように、割り当てをもう少し明確にして、設定後に解放してください。

CFDictionaryRef mapping = CFDictionaryCreateMutable(NULL, 0, &kCFTypeDictionaryKeyCallBacks, &kCFTypeDictionaryValueCallBacks);
self.mappingByMediatedObject = mapping;
CFRelease(mapping);
于 2011-09-30T16:42:39.333 に答える
1

CFDictionaryNSDictionaryフリーダイヤルでブリッジされています。これは、CoreFoundationオブジェクトとそれに対応するCocoaが交換可能であることを意味します。

したがって、を自動リリースするCFDictionaryには、次のように記述できます。

CFDictionary dict = CFDictionaryCreateMutable(...);
self.mappingByMediatedObject = dict;
[(NSDictionary*)dict autorelease];

もちろん、mappingByMediatedObjectプロパティがその値を保持している場合にのみ辞書を自動解放します(@property(retain)

于 2011-09-30T16:41:25.627 に答える
0

iOS7 および Mac OS X 10.9 以降では、Core-Foundation 自動解放関数 CFAutorelease() を使用できます。

于 2014-05-21T14:54:59.353 に答える