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?
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?
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
arrayWithObjects:count:
internally. arrayWithObjects:
will stop at the first nil
argument, which means if you have a nil
value in the list, it will stop there, and there is no error; whereas with array literals (as well as arrayWithObjects:count:
), it will throw an exception if one of the things in the list is nil
. –
Ballyrag It's the new llvm compiler's literal for creating an array. The compiler changes this to:
NSArray *array = [NSArray arrayWithObjects: object1,object2,nil];
So it is returning an autoreleased object.
A Google search brought up further info:
arrayWithObjects:count:
. –
Ballyrag © 2022 - 2024 — McMap. All rights reserved.