NSArray objectAtIndex: shorthand

George Green picture George Green · Feb 5, 2013 · Viewed 17k times · Source

Possible Duplicate:
Is there some literal dictionary or array syntax in Objective-C?

I have recently noticed that something strange seems to work in objective-c.

When I have an array,

NSArray *myArray = @[@"1", @"b", @"3", @"d"];

I can normally access the second element by,

NSString *element = [myArray objectAtIndex:1]; // second element 

however I seem to now also be able to access it via.

NSString *element = myArray[1];

Does anyone know if this is now a defined behaviour and therefore safe to use, or should I avoid it? Thanks to anyone who can help!!

Answer

Adam Wright picture Adam Wright · Feb 5, 2013

This syntax was added in Clang 3.3 : Objective C Literals. Essentially, the compiler converts expressions of the type objCObj[idx] to the expression [objCObj objectAtIndexedSubscript:idx]. It also works for dictionaries, and you're free to adopt it for your own objects.

As such, you're perfectly safe using it, assuming you'll be using a modern version of Objective C and suitably updated Objective C compiler (i.e. Clang).