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转换CFDictionaryRef
为NSDictionary
?
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)
在ARC中,这应该这样做:
CFDictionaryRef currentListingRef = ...;
NSDictionary *currentListing = CFBridgingRelease(currentListingRef);
Run Code Online (Sandbox Code Playgroud)
这将释放CF对象并将对象的所有权转移到ARC,否则您应手动释放CF对象.