Чтобы уточнить ответ djhworlds:
alloc
, copy
, mutableCopy
и new
делают вас владельцем нового объекта, retain
делает вас владельцем существующего объекта, и вы становитесь ответственным за -[(auto)release]
его. Другие методы возвращают объект, который был -[autoreleased]
, и поэтому вы не несете за него никакой ответственности, но будьте осторожны: он исчезнет на следующей итерации цикла выполнения (обычно), как это в общем случае когда сливается авторелизный бассейн.
Практическим результатом этого является то, что версия // FAILS прекрасно работает в контексте этого конкретного фрагмента кода, но как только цикл выполнения оборачивается и пул очищается, ваш объект, уже освобожденный и пропавший, вызывает дела идут бум.