Objective-C at sign and curly braces, @{ ... } what does it mean?

2.8k Views Asked by At

I have this line in Objective-C.

NSMutableArray *mutableArray;
[mutableArray addObject:@{ @"Something" : aObject, @"Otherthing" : anotherObject }];

What does the @{ ... } part do exactly? It is an object, but it seems to create some kind of key, value pair on the fly.

3

There are 3 best solutions below

2
Michał Banasiak On BEST ANSWER

It is creating NSDictionary object as you said. Syntax is simple

NSDictionary* dictionary = @{key: object, key: object};

In your example, keys are objects of NSString class. It is important to remember that dictionary copies keys and retains values.

4
James Kuang On

The @{ ... } syntax is a shorthand way of creating a NSDictionary introduced as part of Modern Objective-C. The syntax @{@"key1": object1, @"key2": object2} is just a shorthand for more verbose methods like [NSDictionary dictionaryWithObjectsAndKeys:] among a few others.

1
Anindya Sengupta On

These are called Literals. Apple LLVM Compiler 4.0 and above can use this.

In your question, the expression creates a dictionary

NSDictionary *settings = @{ AVEncoderAudioQualityKey : @(AVAudioQualityMax) };

Similarly arrays which were created using NSArray arrayWithArray and other similar methods, can now be done easily

NSArray *array = @[ @"Hello", @"World"]; 

and you will not even need the nil sentinel.

More details here: http://clang.llvm.org/docs/ObjectiveCLiterals.html