Ответ 1
Потому что в начале я объявлял все свои массивы с помощью alloc, и если в конце некоторой функции я вернул массив, созданный с помощью alloc, мне пришлось автоопределить этот массив, потому что проблемы с утечкой памяти. Теперь, используя первое объявление, мне не нужно ничего отпускать
Это точно правильно, когда вы "продаете" объект. Но в других случаях, когда вы создаете объект на iOS, где у вас есть выбор между получением готового объекта с автореализацией и выделением вызова с последующим выпуском, Apple хочет, чтобы вы использовали alloc и release, поскольку это сохраняет время жизни объекта короткий и под вашим контролем.
Проблема заключается в том, что автореализованные объекты живут в пуле авторесурсов и могут накапливаться до тех пор, пока пул не будет слит, когда бы это ни было.
Еще одна вещь, на которую нужно обратить внимание - это петли. Вы можете создавать объекты с автореализацией, не зная об этом, и они просто накапливаются в пуле. Решение состоит в том, чтобы создать собственный пул автозапуска в начале цикла и отпустить его в конце цикла, чтобы объекты были выпущены каждый раз через цикл.
EDIT - 12/18/2011: Но с iOS 5 и приходом ARC механизм авторекламы намного эффективнее, и нет такой вещи, как release
, поэтому различие между alloc-init и конструктором удобства, вендинг автореализованного объекта становится спорным. (Также он теперь представляет собой блок @autoreleasepool
, а не объект автоопределения (псевдо).)