如何自动发布CFMutableDictionary?
我正在创建它:
self.mappingByMediatedObject = CFDictionaryCreateMutable(NULL, 0, &kCFTypeDictionaryKeyCallBacks, &kCFTypeDictionaryValueCallBacks);
在dealloc中:
self.mappingByMediatedObject = nil;
答案 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)
CFDictionary
和NSDictionary
是免费桥接的。这意味着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()。