P.S. Присмотрелся к ARC внимательнее. Да, это не просто reference counting.
А расширенная поддержка компилятором, статический анализ.
С одной стороны, хорошо, когда что-то уходит на компилятор.
С другой стороны, иногда тонкости скрытого поведения ещё сложнее держать в голове, чем что-то делать явно.
Мне механизм показался сложным для безошибочного использования средним разработчиком.

Лучше любой вариант явного освобождения с гарантией не-разрушения памяти (в машинах с широкой адресацией типа Эльбруса - однократное использование виртуального адреса; на обычной архитектуре - хранение доп. метки UID адресуемого объекта вместе с указателем и сверка при обращении; либо рециркуляция объектов по типам).

А любой умный механизм освобождения уже над этим безопасным ручным управлением делать библиотечно специально под задачу.
Допустим, граф объектов привязан к своему домену, он отвечает за освобождение.
Или спец. подсчёт ссылок уже в базовом типе для какой-то разновидности объектов.