0

如何autorelease一个CFMutableDictionary?Autorelease CFMutableDictionary

我是这样创造的:

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

而且在dealloc中:

self.mappingByMediatedObject = nil; 

回答

3

的CoreFoundation没有的概念autorelease--这是一个可可级构造。然而,对于遇到像琴弦世界和集合类是"toll-free" bridged的对象,你可以通过铸造CF参照其相应的可可参考,并发送了-autorelease消息,像这样得到同样的结果:

[(NSDictionary *)aDictionaryRef autorelease]; 

然而,就你而言,你可能并不是真的想在这里使用autorelease,因为你没有回传Cocoa调用者的引用。为什么不能多一点明确的周围的分配,而不是,只是释放它设置之后,像这样:

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

实际上这不起作用,因为我不能使用retain作为属性属性,因为值(CFMutableDictionary)不是对象,所以这样做会导致立即收集实例。但这只是我的情况的具体情况,而不是我所问的。 – Undistraction

1

CFDictionaryNSDictionary是免费电话桥接。这意味着CoreFoundation对象和它的Cocoa对象是可互换的。

因此自动释放一个CFDictionary你可以写:

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

当然自动释放字典只有当你mappingByMediatedObject属性保留其值(@property(retain)

0

随着iOS7和Mac OS X 10.9您可以使用Core基金会自动释放功能CFAutorelease(中) 。