gpt4 book ai didi

objective-c - 在 block 保留周期中调用函数

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

如果我从 block 内部调用的函数引用“self”,是否会创建一个保留循环?

__weak id weakSelf = self;

- (void)firstFunction
{
id strongSelf = weakSelf;
if (!strongSelf) return;

[anObject performBlock:^{
[strongSelf secondFunction];
}];
}

- (void)secondFunction
{
[self doSomeCrazyStuff];
self.counter++;
//etc.
}

我在“secondFunction”中调用“self”,是否需要将我的弱指针传递给此函数并改为使用它?

最佳答案

有可能。

保留循环是通过strong 引用循环创建的,变量 上的限定符(即弱、强)是这些引用所在的实际变量来自是无关紧要的。因此,您的 block 引用的 strongSelf 是对 self 的强引用,并且您具有与使用 self 相同的保留周期潜力本身。

回复:评论

让您的 block 保持弱引用是解决此问题的标准方法。如果您在 block 中使用 weakSelf 则没有强引用,如果在 block 被调用时 weakSelfnil 那么调用 [weakSelf secondFunction] 什么都不做——你可以在 Objective-C 中发送消息 nil。您不会创建循环,在 block 调用期间可能会创建引用的强副本,但这将在 block 调用返回后进行。

关于objective-c - 在 block 保留周期中调用函数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12468362/

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