我正在学习Objective-C,并不断碰到@符号。它用于不同的场景,例如在字符串开头或用于综合访问器方法。
@符号在Objective-C中是什么意思?
我正在学习Objective-C,并不断碰到@符号。它用于不同的场景,例如在字符串开头或用于综合访问器方法。
@符号在Objective-C中是什么意思?
Answers:
该@字符未在C或C ++标识符中使用,因此用于引入Objective-C语言关键字,而不会与其他语言的关键字发生冲突。这使语言的“目标”部分可以自由地与C或C ++部分混合。
因此,除了极少数例外,任何时候@在某些Objective-C代码中看到的都是在看Objective-C构造而不是C或C ++构造。
主要的例外是id,Class,nil,和Nil,它们通常被视为语言的关键字,即使他们可能也有一个typedef或#define甩在身后。例如,编译器实际上确实会id根据其应用于声明的指针类型转换规则以及是否生成GC写障碍的决定来特别对待。
其他的例外是in,out,inout,oneway,byref,和bycopy; 这些用作方法参数和返回类型的存储类批注,以使分布式对象更有效。(他们变得可从运行时,它DO可以看一下,以确定如何最好地序列化交易的方法签名的一部分。)还有中的属性@property声明copy,retain,assign,readonly,readwrite,nonatomic,getter,和setter; 这些仅在@property声明的属性部分内有效。
@。
@字符未由C使用,因此它是替代解析的便捷“转义线”,该解析还保留了与现有C代码100%的兼容性。
来自Objective-C教程:@ Symbol,其原因在于各个关键字的前面:
使用@应该可以更轻松地将Objective-C编译器连接到现有的C编译器。因为@在字符串中除了字符串文字在C中的任何上下文中都是无效的,所以可以修改令牌化程序(编译器中的一个简单的早期步骤),以简单地在字符串常量之外查找@字符(令牌化程序可以理解字符串文字) ,因此可以区分)。遇到@时,令牌化程序会将编译器的其余部分置于“ Objective-C模式”。(Objective-C解析器将负责在检测到Objective-C代码结束时将编译器返回到常规C模式)。
同样,当在字符串文字的前面看到它时,它在C中生成NSString而不是'char *'。
来自Macrumors:Objective-C教程,位于字符串文字前面:
还有@“” NSString文字。它实质上是NSString的+ stringWithUTF8String方法的简写。
@还为C字符串添加了unicode支持。
从手册:
Objective-C框架通常不使用C样式的字符串。相反,它们将字符串作为NSString对象传递。
NSString类为字符串提供对象包装,它具有您所期望的所有优点,包括用于存储任意长度字符串的内置内存管理,对Unicode的支持,printf样式的格式化实用程序等。由于此类字符串是常用的,因此Objective-C提供了一种从常量值创建NSString对象的简写符号。要使用此速记,您需要做的是在普通的双引号字符串前加上@符号,如以下示例所示:
NSString *myString = @"My String\n"; NSString *anotherString = [NSString stringWithFormat:@"%d %@", 1, @"String"];
@使用的一个示例。我正在看这样的代码:mapperOptions = @{ kSTMapperVolumeResolutionKey: @(volumeResolution),...与NSString无关