将 NSString 转换为常量时,我通常使用
[@"..." UTF8String];
我只是在查看有关地址簿编程的苹果文档,我看到他们使用宏
CFSTR("...");
出于好奇,我只是想知道两者之间有什么不同吗?
将 NSString 转换为常量时,我通常使用
[@"..." UTF8String];
我只是在查看有关地址簿编程的苹果文档,我看到他们使用宏
CFSTR("...");
出于好奇,我只是想知道两者之间有什么不同吗?
CFSTR("...")本质上是@"...". 实际上,您可以执行以下操作:
const char *utf8dots = [(NSString *)CFSTR("...") UTF8String];
您将获得与使用第一行代码相同的结果。
理论上,CFSTR()创建一个常量CFString,而@""创建一个常量NSString。实际上,这两种类型是可以互换的。
这有帮助吗?
那些创造了完全不同的东西。一个给你一个 CFStringRef,它是一个对象(嗯,一个 CFType,但它与对象兼容)。另一个给你一个 char*,它只是一个字符数组,根本不是一个对象。例如,您可以这样做:
[(NSString *)CFSTR("foo") UTF8String];
那将是完全有效的。
前者实际上并没有创建任何东西,它只是返回const char一个 NSString(运行时函数)的内部指针。后者将创建一个编译时常CFStringRef量值。它不能与变量一起使用,因为这些变量在编译时不可用。
编辑我意识到最后一句话有点含糊。您可以将 的结果用作CFSTR变量,但不能将变量作为参数传递。