将 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
变量,但不能将变量作为参数传递。