gpt4 book ai didi

ios - 保留周期关注

转载 作者:行者123 更新时间:2023-11-28 18:15:30 24 4
gpt4 key购买 nike

我接手了别的公司的项目,给变量赋值的时候经常看到这部分代码:

// interface:
@property NSArray *foos;


// somewhere in implementation:
BOOL foosExist = ^BOOL {
return self.foos.count > 0; // self inside block
}();

此外,当通过底层变量 _foos 引用内部 block 到 foos 属性时,编译器声明:

Block implicitly retains "self"; explicitly mention "self" to indicate this is intended behavior.

这个 self inside block 真的会创建保留循环吗?如果不是,为什么?有人可以详细说明吗?

最佳答案

您的示例中没有循环。

您的 block 只是在计算表达式期间创建的一个值,它们会立即应用以生成一个 BOOL 值。

虽然您的情况不寻常,创建一个 block 以立即将其应用于同一表达式,但当您将 block 直接传递给另一个方法或通过将其存储在局部变量中并传递变量值时,会发生类似的情况 -没有创建循环。

如果相反,您创建了相同的 block ,但将其存储到实例 变量(不是 局部变量),则self 将引用 block ,该 block 将引用 self,并且您将有一个循环。这本身并不坏,只有在循环永不中断的情况下才会变得糟糕,这会导致泄漏。但是,如果循环在某个时候被打破,比如将不同的值写入实例变量,那么循环永远不会成为问题。

HTH

关于ios - 保留周期关注,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/43801415/

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