在处理NSString
时,我们总是需要在字符串的开头包含de @
。
例如:
NSString *string = @"Hello, World!";
string
是班级NSString
的对象。
我突然意识到@
可能是重载运算符,它将C字符串转换为类NSString
的对象。
是这样吗?或者这只是我对你的Noob心灵的遐想?
答案 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];