gpt4 book ai didi

objective-c - 我们需要在 Objective-C 的 block 中使用 weak self 吗?

转载 作者:太空狗 更新时间:2023-10-30 04:01:55 36 4
gpt4 key购买 nike

我注意到了 Apple's documentation说我们在捕获 self 时需要避免强引用循环。

示例中的 block 是 self 的属性。

但是如果我将一个 block 作为局部变量放在 dispatch_async 语句中呢?

在这种情况下,即使我直接调用self的方法也不会产生retain cycle吧?

this article 是否需要以下代码生成 weakSelf? ?

// your code
__weak typeof(self) weakSelf = self;
dispatch_async(dispatch_get_main_queue(), ^{
__strong typeof(weakSelf) strongSelf = weakSelf;
if (strongSelf) {
[strongSelf doThis];
[strongSelf doThat];
[Manager.sharedInstance updateSuccessCount];
}
});

// more code

最佳答案

在给出的示例中,使用 dispatch_async ,不会有保留周期,所以捕获 self 是安全的强烈在这里。唯一的区别是如果self在这dispatch_async之间被其他一切释放被调用,当 block 实际运行时,它会稍微延迟 self 的实际释放。在那短暂的时间内,并且还可能影响释放实际发生在哪个线程上。但总的来说,使用 dispatch_async 时无论哪种方式都没有坏处。 .

您可能希望按照上面编写的示例的方式执行此操作的一种情况是,如果 block 中运行的代码有些昂贵并且只希望在绝对必要时执行,并且如果 self 则没有必要。已经被其他一切释放了。

另一种情况可能是 if self使用大量内存并在其他东西开始消耗大量内存之前正常释放。在那种情况下,您可能不希望同时分配这两个实例。

关于objective-c - 我们需要在 Objective-C 的 block 中使用 weak self 吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/36606655/

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