gpt4 book ai didi

ios - block 中的 WeakSelf

转载 作者:可可西里 更新时间:2023-11-01 05:04:28 25 4
gpt4 key购买 nike

有一个关于 weak self 、 blocks 和 retain cycle 的问题。

根据这本书,我明白我们需要在 block 中使用 weakself..问题是,什么时候?

例如,简单的动画代码,从不包含weakself..

self.myView.alpha = 1.0;
[UIView animateWithDuration:0.2 animations:^{
self.myView.alpha = 1.0;
}];

这段代码可以吗?或者我应该在 block 之前创建一个 weakself 并在内部使用它?

在我所有的代码和我曾经从事过的所有其他项目中,从未见过使用 weak self 的一行。我现在正尝试在每个街区使用 weakself ..只是我不确定是否有必要

期待您的意见谢谢

最佳答案

当存在保留循环的可能性时,您应该使用 weak selfs。

假设 foo 的一个实例对 bar 有一个强引用。现在你给 bar 一个引用 foo 自身的 block 。现在有人释放了 foo,但是 bar 保留了这个 block 。现在 foo 对 bar 有强引用,而 bar 对 block 中的 foo 有强引用。 Foo 不会被释放,因此 bar 也不会被释放,因为 bar 一直持有它。但是唯一保留在 bar 上的是现在未使用的 foo。您有一个保留周期,这两个对象现在漂浮在无法访问的内存中。

UIView 的动画没有问题,因为 block 在 animate: 方法返回之前被调用,并且 UIView 不会保留 block 。

ARC 通常会在发现可能存在循环保留时警告您。但情况并非总是如此。一个好的经验法则是,当您不知道 block 将在哪里结束时使用弱 self 。

希望对您有所帮助。

关于ios - block 中的 WeakSelf,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/22839071/

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