如何自动释放 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 级别的构造。但是,对于像字符串和集合类这样的跨世界桥接的“免费”对象,您可以通过将 CF 引用转换为其相应的 Cocoa 引用并发送-autorelease
消息来获得相同的结果,如下所示:
[(NSDictionary *)aDictionaryRef autorelease];
但是,在您的情况下,您可能真的不想在这里使用 autorelease,因为您没有交回 Cocoa 调用者的引用。为什么不对分配更明确一点,而是在设置后释放它,如下所示:
CFDictionaryRef mapping = CFDictionaryCreateMutable(NULL, 0, &kCFTypeDictionaryKeyCallBacks, &kCFTypeDictionaryValueCallBacks);
self.mappingByMediatedObject = mapping;
CFRelease(mapping);
CFDictionary
并且NSDictionary
是免费桥接的。这意味着 CoreFoundation 对象和它的 Cocoa 对象是可以互换的。
因此,要自动释放 a CFDictionary
,您可以编写以下内容:
CFDictionary dict = CFDictionaryCreateMutable(...);
self.mappingByMediatedObject = dict;
[(NSDictionary*)dict autorelease];
当然,仅当您的mappingByMediatedObject
属性保留其值(@property(retain)
)时才自动释放字典
从 iOS7 和 Mac OS X 10.9 开始,您可以使用 Core-Foundation 自动发布函数 CFAutorelease()。