2014-06-26 47 views
3

在Swift中,可以选择使用unownedweak。为什么在使用weak时使用unowned?看起来两者几乎一样,weak更安全。为什么使用无主时,你可以使用弱?

+0

我相信唯一的区别是弱必须是可选的,而无主不能,给你一个更清晰的语法,当你从弱的安全是无关紧要的,指针得到清理是一个错误。 –

+2

我投票重新提出这个问题。我不认为这应该作为一个重复被关闭。另一个问题是询问*这些参考文献是什么,而这个问题询问*为什么会使用其中一个,而另一个提供额外的安全性。 – dasblinkenlight

回答

8

Apple says的规则如下:

  • 使用weak引用时,它是有效的,提及在其寿命期间的某个时刻成为nil
  • 如果您知道在初始化过程中设置该引用永远不会为零,则使用无主引用。

其原因在首位具有unownedweak必须是可选的类型,而unowned将是非可选的。这样可以避免展开和/或检查,这与可选类型的变量相关联。

这两种引用都带有相同的花费:Swift跟踪它们,以便它可以设置weaknil的引用,并且在引用的对象被销毁时标记为unowned引用无效。

+0

“当参考被标记为无主时不需要做的事情”不正确。同样的事情必须用'无主的'引用完成。否则,他们如何保证当你访问一个解除分配的对象的'unowned'引用时它会导致运行时错误? – user102008

+0

@ user102008你是对的,他们必须跟踪这两种参考。我编辑了答案,谢谢! – dasblinkenlight

4

弱引用必须是可选的,因此您在使用它们之前始终确保它们不是nil的行李和开销。另一方面,无主的引用不能是可选的,因此您可以保证它们始终存在,并且可以在不展开的情况下使用它们。

相关问题