Вы не потеряете память в этом коде, и само освобождение массива вызовет сбой, когда массив будет автоматически освобожден в конце цикла выполнения.
Большинство классов Какао предоставляют несколько способов создания нового объекта и очень соответствуют этому соглашению:
[[NSSomeObject alloc] init]
: вы ответственны за освобождение объекта (метод экземпляра).
[NSSomeObject someObject]
: объект будет автоматически освобожден для вас, обычно в конце цикла выполнения (метод класса). Это примерно эквивалентно [[[NSSomeObject alloc] init] autorelease]
.
Правильное использование метода экземпляра будет:
a = [[NSMutableArray alloc] init];
// do stuff
[a release];
Правильное использование метода класса будет:
a = [NSMutableArray array];
// do stuff, array is in the autorelease pool
Обратите внимание, что Apple рекомендовала вам как можно больше избегать удобных методов, чтобы повысить производительность. Это противоречивый совет , который может не сэкономить много процессорного времени и отделяет alloc-init от выпуска для объекта, который вы на самом деле не особо заботитесь о хранении.