当一个对象试图访问释放的无主对象时会发生什么?
What happens when an object tries to access deallocated unowned object?
如果 A 被声明为 unowned var
然后被释放,当另一个对象试图访问 A 时会发生什么?
无主引用与弱引用一样,不会增加被引用对象的保留计数。但是,在 Swift 中,无主引用具有不是 Optional 的额外好处。这使它们更易于管理,而不是诉诸于使用可选绑定。这与隐式解包选项没有什么不同。此外,无主引用是非归零的。这意味着当对象被释放时,它不会将指针清零。这意味着在某些情况下,使用无主引用会导致悬空指针。在 Objective-C 世界中,无主引用映射到 unsafe_unretained
引用。
因此,它会引发一个 Fatal Error
,例如:
Fatal error: Attempted to read an unowned reference but object X was already deallocated
作为 signal SIGABRT
如果 A 被声明为 unowned var
然后被释放,当另一个对象试图访问 A 时会发生什么?
无主引用与弱引用一样,不会增加被引用对象的保留计数。但是,在 Swift 中,无主引用具有不是 Optional 的额外好处。这使它们更易于管理,而不是诉诸于使用可选绑定。这与隐式解包选项没有什么不同。此外,无主引用是非归零的。这意味着当对象被释放时,它不会将指针清零。这意味着在某些情况下,使用无主引用会导致悬空指针。在 Objective-C 世界中,无主引用映射到 unsafe_unretained
引用。
因此,它会引发一个 Fatal Error
,例如:
Fatal error: Attempted to read an unowned reference but object X was already deallocated
作为 signal SIGABRT