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など)で最もよく使用されますが、例のように式にも適用されます。

Objective-C 言語に対するこの拡張機能は、Xcode 4.4 で導入されました。

于 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 に答える