1

ARC 多年前出现以取代痛苦的 MRC,但由于 ARC 只是一种编译器技术,它的魔力发生在编译时。所以,基本上它的作用 - 在适当的地方自动插入retainrelease调用。所以,现在我的问题来了 - ARC 如何处理以下示例

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

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

对象是用创建的ref count == 1(据我所知,至少在旧的 MRC objcallocnewcopy在哪里调用retain。如果我错了,请纠正我),所以编译器必须减少这些对象的引用计数才能释放它们?但是这是如何完成的,因为这些对象实际上没有引用,它们是匿名的!我假设编译器可能会做以下优化

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

我的意思是编译器将引用匿名对象,以便能够调用release它。但是,我不确定这正是它的工作原理!那么,有人可以解释一下在这种情况下实际发生了什么吗?
亲切的问候,
安德烈

4

0 回答 0