为什么我会从将弱自我传递到静态函数的闭包中获得保留周期?



除非我注释掉下面的函数,否则我的AchievementViewController不会从内存中释放

NetworkConnection.achievementList(for: -1) { [weak self] response in
guard let sections = response.object as? [AchievementListSection] else {
return print("Network failure")
}
self?.sections = sections
self?.configureCollectionView()
}

这个函数的定义如下,目前我们只使用延迟的异步调用来发送存根响应。

static func achievementList(for identifier: Int64, responseHandler: RequestResponseClosure?) {
let stubResponse = ResponseObject(object: AchievementListSection.exampleList as NSArray, code: .success)
let randomDelayMilliseconds = Int(arc4random_uniform(1000))
DispatchQueue.main.asyncAfter(deadline: .now() + .milliseconds(randomDelayMilliseconds)) {
responseHandler?(stubResponse)
}
}

自我究竟在哪里被保留下来,以在这里创造一个循环?它作为weak引用传递给NetworkConnection闭包,反过来,当这个闭包传递给DispatchQueue时,我希望它在延迟过去后释放。

尝试注释此行

self?.configureCollectionView() 

mb这是个问题,因为[weak self]足以修复这个闭包中的保留

最新更新