0

重複の可能性:
NSArray 初期化メソッド

配列の初期化との違いは何ですか

NSArray * array = [NSArray array];

NSArray * array = @[];
4

3 に答える 3

2

2 つの式は一般的に同等です。

Clang のドキュメントには、オブジェクト リテラルに関する注意事項が記載されています。

リテラルまたはボックス化された式の構文を使用して作成されたオブジェクトは、ランタイムによって一意であることが保証されていませんが、新しく割り当てられることも保証されていません。そのため、(==、!=、<、<=、>、または >= を使用して) オブジェクト リテラルの場所に対して直接比較を実行した結果は、明確に定義されていませんisEqual:これは通常、メソッド (またはメソッド)を呼び出すことを意図したコードの単純な間違いcompare:です。

ドキュメントに記載されているように、上記の警告は、オブジェクト間で直接比較演算子を使用する場合にのみ発生します。これは、ほとんどの場合、意図したアクションではありません。この動作は重要ではないため、ほとんどの場合、この 2 つは同じ意味で使用できます。

于 2013-01-23T17:31:43.493 に答える
1

は、最新の Objective C@[]のショートカットです。[NSArray array]

理解を深めるために、The_Basics_of_Modern_Objective-Cを確認してください。

私の知る限り、 @[] を使用すると、これは対応するクラス メソッドと同等になります。意味:

@[]          = [NSArray array];
@[@"M",@"P"] = [NSArray arrayWithObjects:@"M",@"P",nil];
于 2013-01-23T17:37:14.283 に答える
0

これらはどちらも似ています。

[NSArray array]@[]空の配列を作成して返します。

@[]Objective-C に追加された新機能です。いくつかの種類のオブジェクトをボックス化し、ショートカット表記の柔軟性を提供します。

Apple LLVM コンパイラ 4.0 以降を使用すると、配列、辞書、および数値 (NSArray、NSDictionary、NSNumber クラス) をメソッドの代わりにリテラル構文を使用して作成できます。リテラル構文では、[]、{}、() と組み合わせた @ 記号を使用して、それぞれ上記のクラスを作成します。

その他の参照ここリテラル

于 2013-01-23T17:31:09.320 に答える