ОК, чтобы расширить ответ выше (спасибо, что поставили меня на правильный путь) ...
return [data autorelease]
Вы выделили некоторый объект "данные" и собираетесь вернуть этот объект вызывающей стороне. В Obj-C это работает так, что на некотором уровне вверх по стеку вызовов существует NSAutoreleasePool. Когда вы отправляете сообщение «autorelease» для данных, оно добавляется в этот пул autorelease. Это позволяет вызывающей стороне кратко использовать объект «данных» (т. Е. В течение всего времени кадра локального стека) без необходимости явного вызова «освобождения», и в конечном итоге, когда пул авто-выпуска «всплывает», данные будут освобождены (если кто-то называет «сохранить»). Это довольно умно.
Сладкое. Я думаю, что только что заработал свой зеленый пояс в управлении памятью Obj-C.