Решение действительно было связано с сохранением, как указано пользователем invariant . Метод класса:
output = [NSMutableString stringWithCapacity:0];
возвращает autorelease
NSMutableString. При назначении моему выходному свойству - по-видимому, даже с флагом сохранения - оно не сохраняло его. Решением было выделить его самому, а не авто-релиз:
output = [[NSMutableString alloc] initWithCapacity:0];
Тогда удержание сработало. Любое объяснение причин было бы очень кстати.
Редактировать
Разобрался, почему. Я получал доступ к экземплярам vars напрямую, а не через геттер / сеттер, который я синтезировал. Больше информации в моем блоге .