我了解Swift之间的用法weak
和表面上的区别:unowned
我见过的最简单的例子是,如果存在 aDog
和 a Bone
,则 theBone
可能对 the 有弱引用Dog
(反之亦然),因为它们可以相互独立地存在。
另一方面,在 aHuman
和 a的情况下Heart
, theHeart
可能有unowned
对人类的引用,因为一旦Human
变得......“取消引用”,Heart
就不能再合理地访问。那和带有 和 的经典Customer
例子CreditCard
。
所以这不是重复的问题。
我的问题是,拥有两个如此相似的概念有什么意义?有什么内部差异需要使用两个关键字来表示本质上 99% 相同的东西?问题是为什么存在差异,而不是差异是什么。
鉴于我们可以像这样设置一个变量:weak var customer: Customer!
,unowned
变量是非可选的优点是有争议的。
我可以看到使用vs 隐式解包变量 via的唯一实际优势是我们可以通过.
unowned
weak
!
unowned
let
...也许编译器可以因此进行更有效的优化。
这是真的吗,还是幕后发生的其他事情为保留这两个关键字提供了一个令人信服的论据(尽管细微的区别——基于 Stack Overflow 的流量——显然让新手和经验丰富的开发人员都感到困惑)。
我很想听听那些在 Swift 编译器(或其他编译器)上工作过的人的意见。