苹果斯威夫特编程语言指南中提到的捕捉符 unowned(safe)和unowned(unsafe),除了weak和unowned.
我(想我)明白之间的差别weak和unowned; 但unowned(safe)和之间有什么区别unowned(unsafe)?指南没有说.
请:不要仅仅依赖于描述Objective-C等价物.
我理解的使用和肤浅的差异weak,并unowned在斯威夫特:
我见过的最简单的例子是,如果有a Dog和a Bone,则Bone可能有弱引用Dog(反之亦然)因为每个可以彼此独立存在.
在另一方面,在的情况下Human和Heart,则Heart可能有一个unowned人类的参考,因为一旦Human变成......"引用",将Heart不能再合理地进行访问.那和经典的例子一起Customer和CreditCard.
所以这不是问题的重复.
我的问题是,有两个这样相似的概念有什么意义?内部差异是什么,需要两个关键字,看起来基本上99%相同的东西?问题是为什么存在差异,而不是存在差异.
鉴于我们可以像这样设置一个变量:weak var customer: Customer!,unowned变量不可选的优点是一个有争议的问题.
我可以看到使用vs隐式展开变量via 的唯一实际优点是我们可以通过引用使引用保持不变.
unownedweak!unownedlet
......也许编译器可以为此做出更有效的优化.
这是真的,还是在幕后发生了其他事情,为保留两个关键词提供了令人信服的论据(尽管略有区别 - 基于Stack Overflow流量 - 显然让新的和经验丰富的开发人员感到困惑).
我最感兴趣的是听过那些使用过Swift编译器(或其他编译器)的人.
swift ×3