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

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

有帮助吗?

解决方案

@ 字符不在 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 宣言。

其他提示

Objective-C 教程:@符号, ,它出现在各个关键词前面的原因:

使用 @ 应该可以更轻松地将 Objective-C 编译器连接到现有的 C 编译器。由于 @ 在除字符串文字之外的 C 语言中的任何上下文中都无效,因此可以修改分词器(编译器中的早期且简单的步骤)以简单地在字符串常量之外查找 @ 字符(分词器理解字符串文字) ,因此可以区分这一点)。当 @遇到 @时,令牌器将使其余的编译器处于“ Objective-C模式”。 (Objective-C解析器将负责将编译器检测到Objective-C代码的末尾时,将编译器返回常规C模式)。

此外,当在字符串文字前面看到时,它会生成 NSString 而不是 C 中的“char *”。

宏观消息: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"];
许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top