我有这样的代码:
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中使用无主自我而不是弱吗是安全和正确的吗?