@符号在objective-c中代表什么?

我正在学Objective-C,并不断碰到@符号。 它用于不同的场景,例如在一个string的开始或合成访问器方法。

@符号在objective-c中是什么意思?

@字符不用于C或C ++标识符,因此用于以与其他语言的关键字不冲突的方式引入Objective-C语言关键字。 这使得语言的“Objective”部分能够与C或C ++部分自由混合。

因此,除了极less数例外情况,任何时候您在某些Objective-C代码中都会看到@ ,您将看到Objective-C结构,而不是C或C ++结构。

主要的例外是idClassnilNil ,它们通常被视为语言关键字,即使它们也可能具有typedef#define 。 例如,编译器实际上会根据它适用于声明的指针types转换规则以及是否生成GC写屏障的决定而特别对待id

其他例外情况有inoutinoutonewaybyrefbycopy ; 这些用作方法参数和返回types的存储类注释,以使分布式对象更高效。 (它们成为运行时可用的方法签名的一部分,它可以查看以确定如何最好地序列化事务。) @property声明, copyretainassignreadonlyreadwritenonatomicgettersetter getter ; 这些只在@property声明的属性部分内有效。

从Objective-C教程:@符号 ,它是在各种关键字的前面:

使用@应该可以更容易地将一个Objective-C编译器连接到现有的C编译器上。 由于@在C中的任何上下文中都是无效的,除了string字面量外,标记器(编译器中的一个早期的简单步骤)可以被修改为仅仅在string常量外寻找@字符(标记器理解string常量,所以它能够区分这一点)。 遇到@时,标记器会将编译器的其余部分置于“Objective-C模式”。 (当Objective-Cparsing器检测到Objective-C代码结束时,将负责将编译器返回到常规C模式)。

当在string文字前面看到时,它在C中产生一个NSString而不是'char *'

从Macrumors:Objective-C教程 ,当在string文字前:

还有@“”NSString文字。 它基本上是NSString的+ stringWithUTF8String方法的简写。

@还增加了对Cstring的Unicode支持。

从手册 :

Objective-C框架通常不使用C风格的string。 相反,它们以NSString对象的forms传递string。

NSString类为string提供了一个对象包装,它具有您所期望的所有优点,包括用于存储任意长度string的内置内存pipe理,对Unicode,printf样式格式化实用程序的支持等。 因为这样的string通常被使用,所以Objective-C提供了一个用于从常量值创buildNSString对象的速记符号。 要使用这种简写forms,您只需在普通的带双引号的string前加上@符号,如下例所示:

 NSString *myString = @"My String\n"; NSString *anotherString = [NSString stringWithFormat:@"%d %@", 1, @"String"];