将NSString转换为常量时,我通常使用
[@"..." UTF8String];
我只是在地址簿编程上查看苹果文档,我看到他们使用宏
CFSTR("...");
出于好奇,我只是想知道这两者之间有什么不同吗?
答案 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
的结果作为变量,但不能将变量作为参数传递。