2

我已经使用 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的一部分

4

3 回答 3

3

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

Xcode 4.4 引入了对 Objective-C 语言的这种增强。

于 2013-01-23T13:18:17.957 回答
1

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

于 2013-01-23T13:15:50.710 回答
1

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

于 2013-01-23T13:17:55.957 回答