gpt4 book ai didi

ios - 保留 block 内部 block 的循环

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

我是否必须连续声明弱引用以打破嵌套block的保留循环?

__weak typeof(self) weakSelf = self;
[self setMyBlock:^(id obj, NSUInteger idx, BOOL *stop) {
typeof(self) strongSelf = weakSelf;
[strongSelf doSomething];
[strongSelf setMyBlock:^(id obj, NSUInteger idx, BOOL *stop) {
//do I need to create another weak reference to strongSelf for this block?
[strongSelf doSomething];
}];
}];

最佳答案

恐怕是这样。 [strongSelf setMyBlock:<inner block>]会导致self保留内部 block 。如果内部 block 对 self 有强引用,就是一个循环。 strongSelf 的事实变量被分配来自一个__weak限定变量本来没有什么区别。

正如其他一些用户提到的,您可以使用原始的 weakSelf而不是创建一个新的。您创建 strongSelf 的原因 block 中的引用是否则 self block 运行时可能会被释放。 strongSelf要么结束 nil (如果 selfstrongSelf 被分配之前被释放,但这不会造成伤害)否则 self在执行 block 时不会被释放,因为你有一个强引用。在你对self有强烈引用的时候, 原文weakSelf 可以安全使用,因为self不会被释放。

关于ios - 保留 block 内部 block 的循环,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/30602436/

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