Я всегда использую метод класса, где это возможно, потому что это приводит к меньшему количеству подробного кода, и если вы просто собираетесь вернуть объект вызывающей стороне, вам все равно придется его автоматически высвобождать, если вы получили его с помощью alloc.
На мой взгляд, совет от Apple был плохо сформулирован. Люди, кажется, воспринимают это как полный запрет на авто-релиз. Это просто не тот случай. Вы просто должны помнить, что авто-релиз идет с ценой памяти, но он не так высок, как вы думаете. Каждое событие runloop, кроме событий timer, поставляется с новым пулом автоматического выпуска, который очищается при возврате в runloop. Так что, если вы знаете, что метод будет быстрым, нет проблем. Кроме того, если объект собирается пережить текущее событие, это не проблема, поскольку накладные расходы на объект в пуле автоматического выпуска довольно малы, и его истощение не приведет к освобождению объекта в любом случае.
Единственный случай, когда вам нужно соблюдать осторожность при размещении объектов без разбора в пуле автоматического выпуска, - это интенсивная обработка, создающая множество временных автоматически выпущенных объектов. Вы можете уменьшить давление этих методов, создавая авто-релизные пулы и сливая их по мере продвижения. например,
while(someCondition)
{
NSAutoreleasePool* pool = [[NSAutoreleasePool alloc] init];
// intensive processing
[pool drain];
}