【问题标题】:What does the "at sign" @ mean in this objective C code这个目标 C 代码中的“at 符号”@ 是什么意思
【发布时间】:2013-01-06 23:37:17
【问题描述】:

我已经使用 Objective C 好几年了,但我不知道 @ 符号可以这样使用(for 循环内的第 6 行):

- (void)encodeWithCoder:(NSCoder *)coder
{
    [coder encodeInteger:mti forKey:@"mti"];

    NSMutableArray *arr = [NSMutableArray arrayWithCapacity:N];
    for (int i = 0; i < N; i++)
        [arr addObject:@(mt[i])];
    [coder encodeObject:arr forKey:@"mt"];
}

这是什么意思?令人惊讶的是我可以删除它并且编译器没有抱怨并且代码看起来工作正常?!

这是 MTRandom https://github.com/preble/MTRandom/blob/master/MTRandom/MTRandom.m#L115 的一部分

【问题讨论】:

  • 这是一个新的符号——创建一个 NSNumber。也有类似的符号来创建 NSArrays 和 NSDictionaries。
  • 您现在还可以使用[] 来索引 NSArray 或在 NSDictionary 中查找对象。

标签: objective-c at-sign


【解决方案1】:

在此上下文中,@ 运算符将 C 数值(int、long、float、double 等)转换为 NSNumber 的实例。它最常用于数字文字(例如@3.5),但也适用于您的示例中的表达式。

这个对 Objective-C 语言的增强是在 Xcode 4.4 中引入的。

【讨论】:

    【解决方案2】:

    这是 Objective-C 的新功能,它将原始整数转换为 NSNumber,也有 NSArrays @(..) 和 NSDictionary @{...}

    【讨论】:

      【解决方案3】:

      这是一种新的语法,用于用更少的输入来装箱值。假设 mt[i] 是一个数字类型,@(mt[i]) 将它放在一个 NSNumber 对象中。

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2016-08-15
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多