加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 百科 > 正文

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

发布时间:2020-12-16 07:01:24 所属栏目:百科 来源:网络整理
导读:如果我从块内部调用的函数引用“self”,那会创建一个保留周期吗? __weak id weakSelf = self;- (void)firstFunction{ id strongSelf = weakSelf; if (!strongSelf) return; [anObject performBlock:^{ [strongSelf secondFunction]; }];}- (void)secondFunc
如果我从块内部调用的函数引用“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’,我是否需要将弱指针传递给此函数并使用它?

解决方法

潜在的.

保留周期是通过具有强引用的循环来创建的,除了变量上的限定符(即弱,强)之外,那些引用来自的实际变量是无关紧要的.如此强大的自我引用的自我是对自我的强烈参考,你有一个保留周期的潜力,就像你自己使用自我一样.

回复:评论

让您的块保持弱引用是解决此问题的标准方法.如果在块中使用weakSelf,则没有强引用,如果在块调用时,weakSelf为nil则调用[weakSelf secondFunction]将不执行任何操作 – 您可以在Objective-C中发送nil消息.您不会创建一个循环,在块的调用期间可能会创建一个强大的引用副本,但这将在调用该块后返回.

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读