Using @[array, of, items] vs [NSArray arrayWithObjects:]

3.4k Views Asked by At

Is there a difference between

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

and

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

Is one preferred over the other?

2

There are 2 best solutions below

2
On BEST ANSWER

They are almost identical, but not completely. The Clang documentation on Objective-C Literals states:

Array literal expressions expand to calls to +[NSArray arrayWithObjects:count:], which validates that all objects are non-nil. The variadic form, +[NSArray arrayWithObjects:] uses nil as an argument list terminator, which can lead to malformed array objects.

So

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

would throw a runtime exception if objectTwo == nil, but

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

would create an array with one element in that case.

1
On

No. At compile time the @[...] literals will be changed to arrayWithObjects:

The only difference is that @[...] is only supported in newer versions of the LLVM compiler.