Вы можете использовать Unmanaged
тип для обхода ARC для определенных объектов. Я не очень много пробовал, но я думаю, что это будет выглядеть примерно так:
Unmanaged
: let unmanagedObj = Unmanaged.passRetained(obj)
Unmanaged
вокруг не приведет к накладным расходам ссылок. Когда вам нужно использовать объект, извлеките его так: let obj = unmanagedObj.takeUnretainedValue()
unmanagedObj.release()
Конечно, это работает только до тех пор, пока вы контролируете функции, необходимые для передачи объекта, потому что вы должны изменить их на выбор объекта на значение Unmanaged
. Я не знаю, так ли это для вас.
Возможно, вы можете выяснить, какие типы объектов вызывают наибольшую нагрузку на подсчет ссылок в вашем коде, переключив различные части графика объекта на Unmanaged
.