我了解Swift中
最简单的例子是,如果有一个
另一方面,在
因此,这不是关于这个问题的重复。
我的问题是,拥有两个如此相似的概念的意义何在?内部区别是什么,需要为本质上几乎相同的事情拥有两个关键字?问题是为什么存在差异,而不是差异是什么。
考虑到我们可以像这样设置变量:
此外,编译器可能会出于某种原因进行更有效的优化。是否正确?还是发生了其他事情,提供了保留两个关键字的有力论据(尽管根据Stack Overflow的流量,微小的区别显然令新手开发者和经验丰富的开发者感到困惑)?
weak
和unowned
之间的使用和表面差异:最简单的例子是,如果有一个
Dog
和一个Bone
,则Bone
可以对Dog
进行弱引用(反之亦然),因为它们各自可以独立存在。另一方面,在
Human
和Heart
的情况下,Heart
可以有一个对人类的unowned
引用,因为一旦Human
变得“dereferenced”,就无法合理地访问Heart
。 这是与Customer
和CreditCard
的经典示例。因此,这不是关于这个问题的重复。
我的问题是,拥有两个如此相似的概念的意义何在?内部区别是什么,需要为本质上几乎相同的事情拥有两个关键字?问题是为什么存在差异,而不是差异是什么。
考虑到我们可以像这样设置变量:
weak var customer: Customer!
,unowned
变量的优点是非可选的是无意义的。唯一实际的优点是,我们可以通过let
使unowned
引用保持常数。此外,编译器可能会出于某种原因进行更有效的优化。是否正确?还是发生了其他事情,提供了保留两个关键字的有力论据(尽管根据Stack Overflow的流量,微小的区别显然令新手开发者和经验丰富的开发者感到困惑)?
我非常想听听那些曾经在Swift编译器(或其他编译器)上工作过的人的意见。