Swift 斯威夫特:ARC如何处理匿名对象?

Swift 斯威夫特:ARC如何处理匿名对象?,swift,automatic-ref-counting,compiler-optimization,manual-retain-release,swift-compiler,Swift,Automatic Ref Counting,Compiler Optimization,Manual Retain Release,Swift Compiler,ARC在很多年前就开始取代痛苦的MRC,但由于ARC只是一种编译器技术,它的神奇之处就发生在编译时。因此,它基本上是这样做的——在适当的地方自动插入retain和release调用。所以,现在我的问题来了——ARC如何处理以下示例 func foo() { X().doSomething() } func bar() { anotherFunc(X()) } 对象是用ref count==1创建的(据我所知,至少在旧的MRC objcalloc,new,copy中调用retain。如果我

ARC在很多年前就开始取代痛苦的MRC,但由于ARC只是一种编译器技术,它的神奇之处就发生在编译时。因此,它基本上是这样做的——在适当的地方自动插入
retain
release
调用。所以,现在我的问题来了——ARC如何处理以下示例

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

func bar() {
 anotherFunc(X())
}
对象是用
ref count==1
创建的(据我所知,至少在旧的MRC objc
alloc
new
copy
中调用
retain
。如果我错了,请纠正我),因此编译器必须减少这些对象的ref count以解除锁定?但是这是怎么做到的呢?因为实际上没有对这些对象的引用,它们是匿名的!我假设编译器可以进行以下优化

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

我的意思是,编译器将引用匿名对象,这样它就能够对其调用
release
。但是,我不确定它到底是怎么工作的!那么,有人能解释一下在这个场景中实际发生了什么吗?
善意的问候,
安德烈

你可以在:)上检查生成的汇编代码你可以在:)上检查生成的汇编代码