在处理NSString
s 时,我们总是需要@
在字符串的开头包含 de。例如:
NSString *string = @"Hello, World!";
string
是类的一个对象NSString
。
我刚想到@
可能是重载运算符,将 C 字符串转换为类的对象NSString
。
是这样吗?或者这只是我的菜鸟头脑的遐想?
在处理NSString
s 时,我们总是需要@
在字符串的开头包含 de。例如:
NSString *string = @"Hello, World!";
string
是类的一个对象NSString
。
我刚想到@
可能是重载运算符,将 C 字符串转换为类的对象NSString
。
是这样吗?或者这只是我的菜鸟头脑的遐想?
@
是您正在声明某种文字的编译器的指示符。NSString
( @""
) 不是唯一的,NSDictionary
( @{}
)、NSArray
( @[]
) 和NSNumber
( @1
, @YES
) 也有定义的文字定义。
从这里:
使用 @ 应该更容易将 Objective-C 编译器连接到现有的 C 编译器。因为 @ 在 C 中除了字符串文字之外的任何上下文中都无效,因此可以修改标记器(编译器中的一个早期且简单的步骤)以简单地在字符串常量之外查找 @ 字符(标记器理解字符串文字,所以它可以区分这一点)。当遇到 @ 时,标记器会将编译器的其余部分置于“Objective-C 模式”。(Objective-C 解析器将负责在检测到 Objective-C 代码结束时将编译器返回到常规 C 模式)。
从手册:
NSString 类为字符串提供了一个对象包装器,它具有您所期望的所有优点,包括用于存储任意长度字符串的内置内存管理、对 Unicode 的支持、printf 样式的格式化实用程序等等。因为这样的字符串被普遍使用,Objective-C 提供了一种简写符号来从常量值创建 NSString 对象。要使用此速记,您只需在普通的双引号字符串前面加上 @ 符号,如以下示例所示:
NSString *myString = @"My String\n";
NSString *anotherString = [NSString stringWithFormat:@"%d %@", 1, @"String"];
// Create an Objective-C string from a C string
NSString *fromCString = [NSString stringWithCString:"A C string" encoding:NSASCIIStringEncoding];