将无主参考设置为' nil'什么时候去初始化?

时间:2015-11-03 04:27:28

标签: ios swift memory-management automatic-ref-counting dealloc

我在swift中对这个主题感到困惑,据说无主参考必须总是有一个值而且不能是可选的,也意味着它们不能被设置为 PS:如果这有帮助......实例' B'是一个可选类型,强烈引用实例' A'

3 个答案:

答案 0 :(得分:1)

unowned引用的要点是对具有unowned引用的对象之前不会取消分配您保证的内容(基于应用程序逻辑)的弱引用。你可以read more in the documentation

在某种意义上,它与隐式展开的可选类型(例如String!)类似。您告诉编译器,当nil时,您将不会访问该值,如果您执行该程序,则会崩溃。

答案 1 :(得分:0)

在它指向的对象被解除分配之后讨论unowned变量“保持”是什么毫无意义,因为Swift guarantees 你的应用程序将崩溃你试图在它指向的对象被解除分配后尝试访问该变量:

  

另请注意,如果您尝试,Swift会保证您的应用会崩溃   在引用的实例之后访问无主引用   释放。你永远不会遇到意想不到的行为   情况。您的应用程序将始终可靠地崩溃,尽管您应该,   当然,防止它这样做。

答案 2 :(得分:0)

当一个对象的强引用计数降为0时,该对象将被取消初始化,但在其弱引用计数也降至零之前,它不会被释放。

“取消初始化”一个对象意味着它的deinit函数如果有一个,释放它所拥有的任何资源,并清除它可能具有的任何引用(可能取消初始化和释放更多对象),则执行它。 “解除分配”是指运行时回收内存的时间。取消初始化对象的引用计数标题仍然有效。

当您访问weak引用时,Swift运行时会确保对象仍处于初始化状态。如果不是,则弱引用设置为nil,并且取消初始化对象的弱引用计数递减。

无主参考也计入弱参考计数。当您访问无主引用时,Swift运行时还确保对象处于初始化状态;但如果不是,不是清除引用(它不能这样做,因为它不是可选的),它会使程序崩溃。

这有效地使无主引用的行为类似于隐式展开的可选项,而弱引用的行为类似于可选项。

自置零弱引用和清除崩溃无主引用的权衡是,在对所有弱引用进行测试或取消初始化之前,对象的后备内存无法回收,直到所有无主引用都被取消初始化。 / p>

来源:Swift runtime code