違いはありますか
NSArray *myArray = @[objectOne, objectTwo, objectThree];
と
NSArray *myArray = [NSArray arrayWithObjects:objectOne, objectTwo, objectThree, nil];
一方が他方よりも優先されますか?
違いはありますか
NSArray *myArray = @[objectOne, objectTwo, objectThree];
と
NSArray *myArray = [NSArray arrayWithObjects:objectOne, objectTwo, objectThree, nil];
一方が他方よりも優先されますか?
それらはほとんど同じですが、完全ではありません。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つの要素で配列を作成します。
いいえ。コンパイル時に、@[...]
リテラルは次のように変更されます。arrayWithObjects:
唯一の違いは@[...]
、LLVMコンパイラの新しいバージョンでのみサポートされていることです。