当只有外部关闭是weak self
的引用时,是否需要在内部闭包中使用self
?即使外封闭仅在内封闭中使用时,外封闭是否会捕获self
?
self.myClosure = {
// First do something in the background without self...
// Then do something in the main thread with self...
dispatch_async(dispatch_get_main_queue()) {
[weak self] in // IS THIS REALLY NEEDED?
self?.underlyingImage = img
self?.imageLoadingComplete()
}
}
答案 0 :(得分:6)
问题不在于闭包是嵌套的。问题是self有一个强大的闭包引用,所以如果闭包有一个强引用self,你会得到一个引用循环。
但是,代码仍然有一个参考周期。内部闭包不会从调用代码中获取self,而是从外部闭包中获取self。所以外封闭有一个无形的强烈的自我参考。外封闭需要“弱自我”。