NSStrings之前的'@'实际上是一个重载运算符吗?

时间:2013-10-17 18:42:15

标签: objective-c c nsstring operator-overloading c-strings

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

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

string是班级NSString的对象。

我突然意识到@可能是重载运算符,它将C字符串转换为类NSString的对象。

是这样吗?或者这只是我对你的Noob心灵的遐想?

2 个答案:

答案 0 :(得分:5)

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

答案 1 :(得分:4)

来自here

  

使用@应该可以更容易地将Objective-C编译器连接到   现有的C编译器。因为@在C中的任何上下文中都无效   除了一个字符串文字,令牌化器(早期和简单的步骤)   可以修改编译器以简单地查找@字符   在字符串常量之外(tokenizer理解字符串   文字,所以它可以区分这个)。什么时候   遇到tokenizer会将其余的编译器放入   “Objective-C模式。” (Objective-C解析器将负责   在检测到结束时将编译器返回到常规C模式   Objective-C代码)。

来自manual

  

NSString类为包含all的字符串提供了一个对象包装器   您期望的优势,包括内置内存   用于存储任意长度字符串的管理,支持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];