我没有在iOS中获得CFString和NSString之间的差异。任何人都可以建议链接或正确的答案。提前谢谢。
答案 0 :(得分:11)
NSString
是CFString
的基础对手。这意味着它们在内存中具有完全相同的内存布局。
这种架构背后的原因是历史性的,可以追溯到NeXTSTEP和MacOS 9之间的“碰撞”。
由于toll-free bridging机制,许多CF对象具有可互换的NS对应物(其他示例为CFArray
/ NSArray
,CFData
/ NSData
,.. 。)从实际的角度来看,你可以把它们视为同一件事。
以下是关于该主题的一篇很好的文章:http://ridiculousfish.com/blog/posts/bridge.html
作为额外的好事,这里是关于如何在ARC环境中进行桥接的答案:NSString to CFStringRef and CFStringRef to NSString in ARC?
答案 1 :(得分:1)
编辑:此答案适用于非ARC环境。
根据iOS开发人员库:
CFString与其Cocoa Foundation对应的NSString是“免费桥接”。这意味着Core Foundation类型在函数或方法调用中可与桥接的Foundation对象互换。因此,在您看到NSString *参数的方法中,您可以传入CFStringRef,并且在您看到CFStringRef参数的函数中,您可以传入NSString实例。这也适用于NSString的具体子类。有关免费桥接的详细信息,请参阅“免费桥接类型”
将NSString转换为CFStringRef:
NSString *test = @"Everyone is created equal.";
CFStringRef string = (CFStringRef) test;
将CFStringRef转换为NSString:
NSString *backToNSString = (NSString *) string;