我没有得到 iOS 中 CFString 和 NSString 之间的区别。任何人都可以为此建议链接或正确答案。提前致谢。
2 回答
NSString
是 的基金会对应物CFString
。这意味着它们在内存中具有完全相同的内存布局。
这种架构背后的原因是历史性的,可以追溯到 NeXTSTEP 和 MacOS 9 之间的“碰撞”。
由于免费桥接机制,许多 CF 对象具有可互换的 NS 对象(其他示例是CFArray
/ NSArray
、CFData
/ NSData
、...),因此从实际角度来看,您可以将它们视为同一事物。
这是关于该主题的一篇不错的文章:http ://ridiculousfish.com/blog/posts/bridge.html
作为额外的好东西,这是我关于如何在 ARC 环境中执行桥接的答案:NSString to CFStringRef and CFStringRef to NSString in ARC?
编辑:此答案适用于非 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;