12

違いはありますか

NSArray *myArray = @[objectOne, objectTwo, objectThree];

NSArray *myArray = [NSArray arrayWithObjects:objectOne, objectTwo, objectThree, nil];

一方が他方よりも優先されますか?

4

2 に答える 2

32

それらはほとんど同じですが、完全ではありません。Objective-Cリテラルに関するClangのドキュメントには次のように記載されています。

配列リテラル式は、への呼び出しに拡張され +[NSArray arrayWithObjects:count:]、すべてのオブジェクトが非nilであることを検証します。可変個引数形式は+[NSArray arrayWithObjects:]、引数リストのターミネータとしてnilを使用します。これにより、配列オブジェクトの形式が正しくなくなる可能性があります。

それで

NSArray *myArray = @[objectOne, objectTwo, objectThree];

の場合、実行時例外をスローしますobjectTwo == nilが、

NSArray *myArray = [NSArray arrayWithObjects:objectOne, objectTwo, objectThree, nil];

その場合、1つの要素で配列を作成します。

于 2013-01-25T17:55:20.817 に答える
-2

いいえ。コンパイル時に、@[...]リテラルは次のように変更されます。arrayWithObjects:

唯一の違いは@[...]、LLVMコンパイラの新しいバージョンでのみサポートされていることです。

于 2013-01-25T17:51:39.927 に答える