我正在学习Objective-C,并不断碰到@符号。 它用于不同的场景,例如在字符串开头或用于综合访问器方法。

@符号在Objective-C中是什么意思?

===============>>#1 票数:155 已采纳

@字符不在C或C ++标识符中使用,因此用于引入Objective-C语言关键字,而不会与其他语言的关键字发生冲突。 这使语言的“目标”部分可以自由地与C或C ++部分混合。

因此,除了极少数例外,每当您在某些Objective-C代码中看到@时,您都在看的是Objective-C结构而不是C或C ++结构。

主要例外是idClassnilNil ,即使它们后面也可能带有typedef#define ,它们通常被视为语言关键字。 例如,编译器实际上确实根据其应用于声明的指针类型转换规则以及是否生成GC写障碍的决策来特别对待id

其他例外是inoutinoutonewaybyrefbycopy ; 这些用作方法参数和返回类型的存储类批注,以使分布式对象更有效。 (他们变得可从运行的方法签名的一部分,该DO可以看一下,以确定如何最好地连载的交易。)还有中的属性@property声明, copyretainassignreadonlyreadwritenonatomicgettersetter ; 这些仅在@property声明的attribute部分内有效。

===============>>#2 票数:62

来自Objective-C教程:@ Symbol ,其原因在于各个关键字的前面:

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

同样,当在字符串文字的前面看到它时,它在C中成为NSString而不是'char *'。

===============>>#3 票数:24

来自Macrumors:Objective-C教程 ,位于字符串文字前面:

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

@还为C字符串添加了unicode支持。

===============>>#4 票数:13

手册

Objective-C框架通常不使用C样式的字符串。 相反,它们将字符串作为NSString对象传递。

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

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

  ask by Benedict Cohen translate from so

未解决问题?本站智能推荐: