Swift: Как ARC работает с анонимными объектами?

ARC появился много лет назад, чтобы заменить болезненный MRC, но поскольку ARC - это всего лишь метод компиляции, его волшебство происходит во время компиляции. Итак, в основном то, что он делает - автоматически вставляет retain и releaseзвонит, где это необходимо. Итак, теперь мой вопрос - как ARC справляется со следующими примерами

func foo() {
 X().doSomething()
}

func bar() {
 anotherFunc(X())
}

Объекты создаются с помощью ref count == 1(насколько я знаю, по крайней мере, в старом MRC objc alloc, new, copy куда звонить retain. Пожалуйста, поправьте меня, если я ошибаюсь), поэтому компилятор должен уменьшить количество ссылок на эти объекты, чтобы освободить их? Но как это сделать, ведь ссылки на эти объекты на самом деле нет, они анонимны! Я предполагаю, что компилятор может сделать следующую оптимизацию

func foo() {
 let var0001 = X()
 var0001.doSomething()
 var0001.release()
}

Я имею в виду, что компилятор сделает ссылку на анонимный объект, чтобы он мог вызвать releaseв теме. Но я не уверен, что это именно так! Итак, может кто-нибудь объяснить, что на самом деле происходит в этом сценарии?
С уважением,
Андре

0 ответов