Стоимость:
- Время, чтобы найти пул автоматического выпуска текущего потока и добавить в него объект.
- Память, занимаемая объектом до тех пор, пока он не будет освобожден в более поздний момент.
Если вы хотите быть очень консервативным в использовании памяти, вам следует избегать автоматического выпуска. Тем не менее, это полезный метод, который может сделать код более читабельным. Обязательное использование retain / release относится к категории «преждевременной оптимизации».
Если вы находитесь в главном потоке обработки событий Cocoa (которым вы пользуетесь большую часть времени), пул автоматического выпуска очищается, когда управление возвращается обработчику событий. Если ваш метод короткий и не зацикливается на больших объемах данных, то с помощью автоматического освобождения для отсрочки освобождения до конца цикла выполнения вполне подойдет.
Время, когда следует опасаться авто-релиза, - это когда вы находитесь в цикле. Например, вы перебираете адресную книгу пользователя и, возможно, загружаете файл изображения для каждой записи. Если все эти объекты изображений будут автоматически освобождены, они будут накапливаться в памяти до тех пор, пока вы не посетите всю адресную книгу. Если адресная книга достаточно велика, вам может не хватить памяти. Если вы выпустите изображения, как только закончите с ними, в цикле ваше приложение может перезапустить память.
Если вы не можете избежать автоматического высвобождения внутри цикла (это выполняется кодом, который вы не написали и не можете изменить), вы также можете самостоятельно управлять NSAutoreleasePool внутри цикла.
Итак, помните об использовании автоматического освобождения внутри циклов (или методов, которые можно вызывать из циклов), но не избегайте этого, когда это может сделать код более читабельным.