1

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

[@"..." UTF8String];

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

CFSTR("...");

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

4

3 回答 3

5

CFSTR("...")本质上是@"...". 实际上,您可以执行以下操作:

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

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

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

这有帮助吗?

于 2012-07-11T03:02:15.747 回答
3

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

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

那将是完全有效的。

于 2012-07-11T03:00:44.410 回答
1

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

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

于 2012-07-11T02:47:55.270 回答