在这个例子中弱或无主?

时间:2016-10-28 09:52:58

标签: swift reference automatic-ref-counting

我有这样的代码:

open class WebServiceOperation: Operation {

    public init(dependencies: [Operation]? = nil, finishBlock: ((_ operation: WebServiceOperation) -> Void)? = nil) {
        super.init()

        completionBlock = { [weak self, finishBlock] in
            guard let `self` = self, self.isCancelled == false else { return }
            DispatchQueue.main.sync {
                finishBlock?(self)
            }
        }
        // ...
    }
}

我想知道我是否应该在completionBlock中使用unowned而不是weak。 首先 - completionBlock是一个仅由Operation对象本身执行的块,因此它内部的self不会是nil。这就是为什么它可能是无主的。但后来自己将它传递给finishBlock?()作为参数。这将为finishBlock保留self。此传递也在DispatchQueue.main.sync块中完成,该块也应该保留self。 那么在completionBlock中使用无主自我而不是弱吗是安全和正确的吗?

0 个答案:

没有答案