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
в теме. Но я не уверен, что это именно так! Итак, может кто-нибудь объяснить, что на самом деле происходит в этом сценарии?
С уважением,
Андре