gpt4 book ai didi

swift - 如何在快速闭包中实现单向引用

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

我尝试将大部分异步事件封装在操作中,并且通常我有启动其他操作的操作,等等...

我面临的问题是,当我引用原始操作时,它可能会在后续操作完成之前被释放。如果我有 weak self,我使用的闭包就会失败, weak me = self(灾难性的) unowned me = self到位;但如果我使用self没有它们,两个操作都不会释放(内存泄漏)。

是否可以在闭包内保持引用处于事件状态,而不创建双向循环引用情况?

最佳答案

首先,您需要问自己,您的self将来是否会为零。如果是,那么无主就出现了。

安全的方法是使用weak,然后检查它是否已被释放。

  your-closure { [weak self] in
guard let strongSelf = self else {
print("self is been deallocated")
return
}
}

当闭包在上述情况下运行时,它只会捕获weak self。在闭包启动的那一刻,weak self 要么是 self,要么就是 nil。您可以测试一下 strongSelf 是否已设置。

如果weak self等于self,那么strongSelf会保留它,并且它会一直保留到闭包被释放时返回为止。要么全有,要么全无。

关于swift - 如何在快速闭包中实现单向引用,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/44174751/

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