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

如果我从块内部调用的函数引用“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消息.您不会创建一个循环,在块的调用期间可能会创建一个强大的引用副本,但这将在调用该块后返回.

相关文章

一.C语言中的static关键字 在C语言中,static可以用来修饰局...
浅谈C/C++中的指针和数组(二) 前面已经讨论了指针...
浅谈C/C++中的指针和数组(一)指针是C/C++...
从两个例子分析C语言的声明 在读《C专家编程》一书的第三章时...
C语言文件操作解析(一)在讨论C语言文件操作之前,先了解一下...
C语言文件操作解析(三) 在前面已经讨论了文件打开操作,下面...