Как правило, правильное управление памятью для возвращаемых объектов состоит в том, чтобы вызываемый метод устанавливал его как объект с автоматическим освобождением, , за исключением , когда имя метода содержит «copy», «new» или «alloc». В этих случаях (copy / new / alloc) возвращаемый объект сохраняется, и вызывающий объект владеет им (т. Е. Вызывающий отвечает за то, чтобы он был освобожден).
Код, который вы написали в вопросе, будет работать правильно - он вернет автоматически выпущенный объект.
Когда вызывающий абонент получает обратно NSArray
, он может использовать объект сколько угодно, и если ему не нужен объект в будущих вызовах, ему не нужно выполнять какое-либо дополнительное управление памятью. В конце цикла выполнения будет сброшен NSArray
, что является желаемым поведением. Если вызывающему нужно , чтобы объект жил дольше, он должен вызвать на нем retain (или что-то эквивалентное этому, например, вызвать что-то еще, которое вызывает на нем retain), и затем они берут на себя ответственность позвонить в релиз позже.
Полезные вещи:
Кроме того, все это исчезнет, когда ARC (автоматический подсчет ссылок в iOS 5) станет нормой.