gpt4 book ai didi

objective-c - 我们什么时候应该将 weakSelf 更改为 strongSelf?

转载 作者:太空狗 更新时间:2023-10-30 03:58:09 24 4
gpt4 key购买 nike

我知道当我们使用 block 时我们应该使用 weakSelf 来避免 retain cycle。但是我看到有时 block 中有一个 strongSelf。

让我困惑的是:

  1. 为什么一定要把weakSelf改成strongSelf?
  2. 如果我们不将 weakSelf 更改为 strongSelf,会发生什么可怕的事情?
  3. 我们什么时候应该将 weakSelf 更改为 strongSelf?

希望有人能举个具体的例子。

提前致谢。

最佳答案

  1. 为什么一定要把 weakSelf 改成 strongSelf?

有时,如果对 self 的引用已经为 nil(用户关闭 View ),您希望 block 不执行。这就是您首先使用弱引用的原因。 (常见情况)

但是,有时您希望您的 block 完成执行以确保其引用的所有内容都处于事件状态,但前提是“self”仍然存在一旦 block 开始。在这种情况下,您让 block 将弱引用转换为强引用。 (罕见案例)

  1. 如果我们不将 weakSelf 更改为 strongSelf 会发生什么可怕的事情?

如果 block 在 self 处于事件状态时开始执行(允许它开始)但在处理过程中被释放(想想图像处理等耗时功能),然后 block 从 self 访问资源(不再存在)它会崩溃。

  1. 我们什么时候应该将 weakSelf 更改为 strongSelf?

几乎没有。我能想到的唯一例子是当你的 block 一旦开始执行就绝对需要来自“self”的资源。

这个答案中有更详细的解释:

Strong reference in the block, it will be retained?

关于objective-c - 我们什么时候应该将 weakSelf 更改为 strongSelf?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/45070678/

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