将CFDictionaryRef转换为NSDictionary?

joh*_*tig 39 xcode casting objective-c nsdictionary ios4

我有代码(剥离):

CFDictionaryRef *currentListingRef;
//declare currentListingRef here
NSDictionary *currentListing;
currentListing = (NSDictionary *) currentListingRef;
Run Code Online (Sandbox Code Playgroud)

然后我得到错误:

使用ARC禁止将非Objective-C指针类型'CFDictionaryRef*'(又名'const struct __CFDictionary**')转换为'NSDictionary*'

我究竟做错了什么?我如何从a转换CFDictionaryRefNSDictionary

Jos*_*erg 70

ARC改变了桥接的工作方式.

NSDictionary *original = [NSDictionary dictionaryWithObject:@"World" forKey:@"Hello"];
CFDictionaryRef dict = (__bridge CFDictionaryRef)original;
NSDictionary *andBack = (__bridge NSDictionary*)dict;
NSLog(@"%@", andBack);
Run Code Online (Sandbox Code Playgroud)

  • 如何双向更新答案.代码的问题是你有CFDictionarRef*,CFDictionaryRef已经是一个指针类型. (4认同)

Lai*_*mis 8

在ARC中,这应该这样做:

CFDictionaryRef currentListingRef = ...;
NSDictionary *currentListing = CFBridgingRelease(currentListingRef);
Run Code Online (Sandbox Code Playgroud)

这将释放CF对象并将对象的所有权转移到ARC,否则您应手动释放CF对象.

  • CFBridgingRelease 是正确的,假设“...”表示您创建/复制了 CFDictionaryRef。虽然这种情况很可能发生,但您并不总是想转移 (2认同)