- c - 在位数组中找到第一个零
- linux - Unix 显示有关匹配两种模式之一的文件的信息
- 正则表达式替换多个文件
- linux - 隐藏来自 xtrace 的命令
我知道当我们使用 block 时我们应该使用 weakSelf 来避免 retain cycle。但是我看到有时 block 中有一个 strongSelf。
让我困惑的是:
希望有人能举个具体的例子。
提前致谢。
最佳答案
有时,如果对 self 的引用已经为 nil(用户关闭 View ),您希望 block 不执行。这就是您首先使用弱引用的原因。 (常见情况)
但是,有时您希望您的 block 完成执行以确保其引用的所有内容都处于事件状态,但前提是“self”仍然存在一旦 block 开始。在这种情况下,您让 block 将弱引用转换为强引用。 (罕见案例)
如果 block 在 self 处于事件状态时开始执行(允许它开始)但在处理过程中被释放(想想图像处理等耗时功能),然后 block 从 self 访问资源(不再存在)它会崩溃。
几乎没有。我能想到的唯一例子是当你的 block 一旦开始执行就绝对需要来自“self”的资源。
这个答案中有更详细的解释:
关于objective-c - 我们什么时候应该将 weakSelf 更改为 strongSelf?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/45070678/
这是我学到的:当使用self保留 block 时 我需要一个 weakSelf 来打破保留周期 我需要一个 strongSelf 来防止 self 中途变成 nil 所以我想测试一下 strongSe
我已经使用以下模式一段时间了: closure() { [weak self] in guard let strongSelf = self else { return
我知道当我们使用 block 时我们应该使用 weakSelf 来避免 retain cycle。但是我看到有时 block 中有一个 strongSelf。 让我困惑的是: 为什么一定要把weakS
在 Objective-C 的非平凡 block 中,我注意到 weakSelf/strongSelf 的用法。 在 Swift 中 strongSelf 的正确用法是什么?像这样的东西: if le
这个问题在这里已经有了答案: Strong reference to a weak references inside blocks (2 个答案) 关闭 6 年前。
例如,我正在使用 SVInfiniteScrolling ( https://github.com/alexanderedge/SVInfiniteScrolling )。 我有一些看起来像这样的代码
我读过当这样的 block 被执行时: __weak typeof(self) weakSelf = self; [self doSomethingInBackgroundWithBlock:^{
假设我在 UIViewController 子类中有以下方法: - (void)makeAsyncNetworkCall { [self.networkService performAsync
通过在 block 中使用 weakSelf,你可以避免 retain cycle。但有时你应该保持 weakSelf 直到 block retain,因此你需要像 strongSelf 一样使用 _
如果我有一个类 Foo 声明如下: @interface Foo : NSObject @property (copy, nonatomic) void (^aBlock)(void); - (voi
前言 根据Clang docs , "对于 __weak 对象,当前指针被保留,然后在当前完整表达式结束时释放。"这对我来说表明如果我这样做: __weak typeof(self) weakSelf
我是一名优秀的程序员,十分优秀!