gpt4 book ai didi

swift - 为什么我从将弱 self 传递到静态函数的闭包中得到一个保留周期?

转载 作者:行者123 更新时间:2023-12-04 15:13:15 25 4
gpt4 key购买 nike

除非我注释掉下面的函数,否则我的 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()
}

此函数的定义如下,目前我们仅使用延迟的异步调用来发送 stub 响应。

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)
}
}

self 到底在哪里被保留在这里创建一个循环?它作为 weak 引用传递给 NetworkConnection 闭包,当这个闭包传递给 DispatchQueue 时,我希望它在延迟结束后释放。

最佳答案

尝试注释这一行

self?.configureCollectionView() 

mb 这是问题所在,因为 [weak self] 足以修复此闭包中的 retain

关于swift - 为什么我从将弱 self 传递到静态函数的闭包中得到一个保留周期?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/64806505/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com