使用CFSTR()&目标C中的UTF8String

时间:2012-07-11 02:40:54

标签: objective-c

将NSString转换为常量时,我​​通常使用

[@"..." UTF8String];

我只是在地址簿编程上查看苹果文档,我看到他们使用宏

CFSTR("...");

出于好奇,我只是想知道这两者之间有什么不同吗?

3 个答案:

答案 0 :(得分:5)

CFSTR("...")基本上是@"..."的核心基础。实际上,您可以执行以下操作:

const char *utf8dots = [(NSString *)CFSTR("...") UTF8String];

您将获得与第一行代码相同的结果。

理论上,CFSTR()创建常量CFString,而@""创建常量NSString。在实践中,这两种类型是可以互换的。

这有帮助吗?

答案 1 :(得分:3)

那些创造完全不同的东西。一个人得到一个CFStringRef,它是一个对象(嗯,一个CFType,但它与对象兼容)。另一个给你一个char *,它只是一个字符数组,而不是一个对象。例如,你可以这样做:

[(NSString *)CFSTR("foo") UTF8String];

这将是完全有效的。

答案 2 :(得分:1)

前者实际上并没有创建任何东西,它只返回NSString(运行时函数)的内部const char指针。后者将创建编译时常量CFStringRef值。它不能与变量一起使用,因为这些变量在编译时不可用。

编辑我意识到最后一句话有点模糊。您可以使用CFSTR结果作为变量,但不能将变量作为参数传递。