правила управления памятью говорят, что ваш первый пример - а это прямая цитата - неверен.Это даже не вопрос предпочтения, как показывают некоторые ответы здесь.Вызывающий объект обычно не владеет возвращаемым вами объектом, поэтому он должен быть автоматически освобожден.
Конкретный пример из правил гласит:
Это неправильно.Следуя политике владения, это приведет к утечке памяти.
– (NSArray *)sprockets {
NSArray *array = [[NSArray alloc] initWithObjects:mainSprocket,
auxiliarySprocket, nil];
return array;
}
Ссылка объекта на новый объект массива ограничена методом звездочек.После возврата метода объект теряет свою ссылку на новый объект, поэтому не может отказаться от владения.Это само по себе не проблема.Однако в соответствии с соглашением об именах, изложенным ранее, вызывающей стороне не дается никаких указаний на то, что она владеет возвращаемым объектом.Поэтому вызывающая сторона не отказывается от владения возвращенным объектом, что приводит к утечке памяти.