ARC 多年前出现以取代痛苦的 MRC,但由于 ARC 只是一种编译器技术,它的魔力发生在编译时。所以,基本上它的作用 - 在适当的地方自动插入retain
和release
调用。所以,现在我的问题来了 - ARC 如何处理以下示例
func foo() {
X().doSomething()
}
func bar() {
anotherFunc(X())
}
对象是用创建的ref count == 1
(据我所知,至少在旧的 MRC objcalloc
中new
,copy
在哪里调用retain
。如果我错了,请纠正我),所以编译器必须减少这些对象的引用计数才能释放它们?但是这是如何完成的,因为这些对象实际上没有引用,它们是匿名的!我假设编译器可能会做以下优化
func foo() {
let var0001 = X()
var0001.doSomething()
var0001.release()
}
我的意思是编译器将引用匿名对象,以便能够调用release
它。但是,我不确定这正是它的工作原理!那么,有人可以解释一下在这种情况下实际发生了什么吗?
亲切的问候,
安德烈