Ответ на когда вы должны выпустить, это вопрос того, являются ли массив activeLocations и все элементы в этом массиве (помните, что каждый элемент в массиве сохраняется самим массивом)необходимо в течение всего времени существования объекта Location.
Если вы используете массив activeLocations для каких-то временных целей, например, в методе или цепочке методов, то он вам больше не нужен, или вы планируете обновить егочлены в более позднее время, когда вам понадобится следующий, тогда имеет смысл освобождать массив (и его элементы, который является автоматическим), когда вы закончите использовать его, в любой функции, которая в последний раз использует массив.Вы будете использовать соглашение
self.activeLocations = nil;
, чтобы позволить исполняющей системе освободить массив и установить член равным nil.
Если, с другой стороны, activeLocationsданные массива являются обязательными для функционирования объекта Locations и должны существовать, пока существует объект Location, тогда вы захотите освободить массив внутри метода dealloc объекта Location, например:
- (void) dealloc {
[activeLocations release];
[super dealloc];
}
Как это случается, вы почти всегда захотите освободить объекты-члены, такие как activeLocations, в методе dealloc.Это гарантирует, что при освобождении объекта Location очищенные элементы, которые он содержит, очищаются.Помните, что Objective-C не вызывает методы для нулевых указателей, поэтому, если вы ранее установили activeLocations равным нулю, вызов в dealloc является безопасным запретом.
Учитывая то, что вы всегда настроитевыпуск в dealloc, теперь вам действительно нужно спросить себя, нужна ли вам фаза освобождения / воссоздания где-то в жизненном цикле вашего объекта (опять же, определяется требованиями частоты использования).