Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/objective-c/27.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
@符号在objective-c中代表什么?_Objective C - Fatal编程技术网

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

@符号在objective-c中代表什么?,objective-c,Objective C,我正在学习objective-c,不断地碰到@符号。它用于不同的场景,例如在字符串开头或合成访问器方法 @符号在objective-c中是什么意思?来源,原因是它位于各种关键字的前面: 使用@应该可以更容易地将Objective-C编译器连接到现有的C编译器上。因为@在C中除了字符串文本以外的任何上下文中都无效,所以可以修改标记器(编译器中的早期简单步骤),以便只在字符串常量之外查找@字符(标记器理解字符串文本,因此可以区分这一点)。当遇到@时,标记器将把编译器的其余部分置于“Objective

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

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

来源,原因是它位于各种关键字的前面:

使用@应该可以更容易地将Objective-C编译器连接到现有的C编译器上。因为@在C中除了字符串文本以外的任何上下文中都无效,所以可以修改标记器(编译器中的早期简单步骤),以便只在字符串常量之外查找@字符(标记器理解字符串文本,因此可以区分这一点)。当遇到@时,标记器将把编译器的其余部分置于“Objective-C模式”(Objective-C解析器将负责在检测到Objective-C代码结束时将编译器返回到常规C模式)


在字符串文本前面看到的,它在N.String中生成了一个NString而不是C.*/P>< P> >在C或C++标识符中不使用“代码> @ /Cuth>字符,因此它以不与其他语言的关键字冲突的方式引入Objto-C语言关键词。这使得语言的“目标”部分能够自由地与C或C++部分混合。 <> P>因此,在一些ObjuleC代码中,无论何时看到“代码> >代码”,都会看到Objto-C构造,而不是C或C++构造。 主要的例外是

id
Class
nil
nil
,它们通常被视为语言关键字,尽管它们后面可能还有
typedef
#define
。例如,编译器实际上确实特别根据它应用于声明的指针类型转换规则以及是否生成GC写屏障的决定来处理
id

其他例外情况包括
输入
输出
输入
单向
byref
,以及
bycopy
;它们被用作方法参数和返回类型的存储类注释,以使分布式对象更高效。(它们成为运行时可用的方法签名的一部分,可以查看以确定如何最好地序列化事务。)还有
@property
声明中的属性、
copy
retain
assign
readonly
readwrite
非原子
getter
setter
;这些仅在
@property
声明的属性部分中有效。

从,当位于字符串文字前面时:

还有@“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"];

“它本质上是NSString的+stringWithUTF8String方法的简写。”。字符串是静态分配的,这使得它们不同于
+[NSString stringWithUTF8String:][/code>(那些是动态分配的),并且release和retain对它们没有影响。您能解释一下@(表达式)的作用吗?这是我在xcode中键入@时显示的弹出窗口中唯一不理解的项。@(99)与[NSNumber numberWithInteger:99]相同@(是)与[NSNumber Number WithBool:YES]相同。@符号是创建对象的快捷方式。其他人是否被这个“答案”并没有真正回答所述问题的事实所迷惑?提问者说“Objective-C中的“@”是什么意思?”回答者说“这意味着你在使用Objective-C。”我想他已经知道了很多……有点武断;它需要在基本ASCII集中,并且在编写第一个Objective-C预处理器时C尚未使用它。这就是为什么它是
@
的原因。乔恩·麦克隆:利奥是正确的,没有“更深的含义”。C没有使用
@
字符,因此它是一个方便的“转义图案填充”另一种解析方法也保留了与现有C代码100%的兼容性。为什么在@interface和@end之前使用@?但这只是使用
@
的一个示例。我看到的代码如下:
mapperOptions=@{kSTMapperVolumeResolutionKey:@(volumeResolution),
…与NSString无关