2

在处理NSStrings 时,我们总是需要@在字符串的开头包含 de。例如:

NSString *string = @"Hello, World!";

string是类的一个对象NSString

我刚想到@可能是重载运算符,将 C 字符串转换为类的对象NSString

是这样吗?或者这只是我的菜鸟头脑的遐想?

4

2 回答 2

5

@是您正在声明某种文字的编译器的指示符。NSString( @"") 不是唯一的,NSDictionary( @{})、NSArray( @[]) 和NSNumber( @1, @YES) 也有定义的文字定义。

于 2013-10-17T18:44:21.853 回答
4

这里

使用 @ 应该更容易将 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];
于 2013-10-17T18:48:07.663 回答