嵌套闭包是否会导致保留周期?

时间:2016-03-28 20:48:34

标签: ios swift

当只有外部关闭是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()
    }
}

1 个答案:

答案 0 :(得分:6)

问题不在于闭包是嵌套的。问题是self有一个强大的闭包引用,所以如果闭包有一个强引用self,你会得到一个引用循环。

但是,代码仍然有一个参考周期。内部闭包不会从调用代码中获取self,而是从外部闭包中获取self。所以外封闭有一个无形的强烈的自我参考。外封闭需要“弱自我”。