Search code examples
objective-cmemory-managementobjective-c-literals

What kind of object does @[obj1, obj2] create?


I came across the following:

NSArray *array = @[object1, object2];

It seems to be creating an NSArray, but is this array instance an autoreleased object, or must I release it?


Solution

  • This is a new collection literal available in the compiler that ship with xcode 4.4 and above

    @[object1, object2];
    

    is equivalent to

    [NSArray arrayWithObjects:object1, object2, nil];
    

    so yes, it is an autoreleased object, if you need this to be retained, you can do

    myRetainedArray = [@[object1, object2] retain];
    

    this question has a good description of all of the new literals