CFString和NSString之间的区别?

时间:2013-08-16 13:04:53

标签: ios objective-c cocoa

我没有在iOS中获得CFString和NSString之间的差异。任何人都可以建议链接或正确的答案。提前谢谢。

2 个答案:

答案 0 :(得分:11)

NSStringCFString的基础对手。这意味着它们在内存中具有完全相同的内存布局。

这种架构背后的原因是历史性的,可以追溯到NeXTSTEP和MacOS 9之间的“碰撞”。

由于toll-free bridging机制,许多CF对象具有可互换的NS对应物(其他示例为CFArray / NSArrayCFData / 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;