keronsen
keronsen

Reputation: 153

Autorelease vs. release

When I need an array for temporary use, what's the difference between these:

1:

NSMutableArray *stuff = [[NSMutableArray alloc] init];
// use the array
[stuff release];

2:

NSMutableArray *stuff = [NSMutableArray array];
// use the array

3:

NSMutableArray *stuff = [[[NSMutableArray alloc] init] autorelease];
// use the array

I prefer number 2, since it's shorter. Are there any good reasons to use number 1 or 3?

Upvotes: 5

Views: 2201

Answers (1)

Williham Totland
Williham Totland

Reputation: 29039

Number 2 is likely the best choice in most cases.

Number 1 has the chance of losing the release at some point down the line, for whatever reason, but it does release the array immediately, which in memory-starved environments can be useful.

Number 3 is basically a verbose equivalent of number 2, but it does come in handy if you want to use an initWith* that doesn't have a corresponding arrayWith*.

Note: If you are memory-starved, such as in an expensive loop where you need a fresh array for each iteration; don't release and allocate new arrays; just use -removeAllObjects and recycle the array.

Upvotes: 10

Related Questions