Авто-релиз против выпуска - PullRequest
5 голосов
/ 02 ноября 2010

Когда мне нужен массив для временного использования, какая разница между ними:

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

Я предпочитаю номер 2, так как он короче.Есть ли веские причины использовать номер 1 или 3?

1 Ответ

10 голосов
/ 02 ноября 2010

Номер 2, вероятно, лучший выбор в большинстве случаев.

Номер 1 имеет шанс потерять освобождение в какой-то момент по линии, по любой причине, но он немедленно освобождает массив , что в средах с нехваткой памяти может быть полезным.

Номер 3 в основном является подробным эквивалентом числа 2, но он пригодится, если вы хотите использовать initWith *, который не имеетсоответствующий массив с *.

Примечание: Если у вас нехватка памяти, например, в дорогом цикле, где вам нужен свежий массив для каждой итерации; не освобождать и выделять новые массивы;просто используйте -removeAllObjects и перезапустите массив.

...