[Swift] 什么时候该用 unowned

2018-01-11  本文已影响59人  CharlesQiu

翻译:在引用对象的生命周期内,如果它可能为nil,那么就用weak引用。反之,当你知道引用对象在初始化后永远都不会为nil就用unowned.**

现在你就知道了:就像是implicitly unwrapped optional(隐式可选类型),如果你能保证在使用过程中引用对象不会为nil,用unowned 。如果不能,那么就用weak.

下面就是个很好的例子。Class 里面的闭包捕获了selfself永远不会为nil

class RetainCycle {
    var closure: (() -> Void)!
    var string = "Hello"
    init() {
        closure = { [unowned self] in
            self.string = "Hello, World!"
        }
    }
} 

在这个例子中,由于我们在初始化RetainCycle类后立即调用了闭包,所以我们可以认为self永远不会为nil

上一篇 下一篇

猜你喜欢

热点阅读