Autorelease CFMutableDictionary

时间:2011-09-30 16:34:57

标签: objective-c ios memory-management autorelease cfmutabledictionary

如何自动发布CFMutableDictionary?

我正在创建它:

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

在dealloc中:

self.mappingByMediatedObject = nil;

3 个答案:

答案 0 :(得分:3)

CoreFoundation没有autorelease的概念 - 这是一个Cocoa级别的构造。但是,对于字符串和集合类等世界"toll-free" bridged的对象,可以通过将CF引用转换为相应的Cocoa引用并向其发送-autorelease消息来获得相同的结果,如这样:

[(NSDictionary *)aDictionaryRef autorelease];

但是,在你的情况下,你可能真的不想在这里使用自动释放,因为你没有回复Cocoa调用者的引用。为什么不对你的分配更加明确,而只是在设置之后释放它,如下所示:

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

答案 1 :(得分:1)

CFDictionaryNSDictionary是免费桥接的。这意味着CoreFoundation对象及其Cocoa对应物是可互换的。

因此,要自动发布CFDictionary,您可以写下以下内容:

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

当然,只有当您的mappingByMediatedObject属性保留其值(@property(retain)

时才会自动发布字典

答案 2 :(得分:0)

从iOS7和Mac OS X 10.9开始,您可以使用Core-Foundation自动释放功能CFAutorelease()。