【发布时间】:2017-05-05 09:32:07
【问题描述】:
我接手了另一家公司的项目,在给变量赋值时经常看到这部分代码:
// interface:
@property NSArray *foos;
// somewhere in implementation:
BOOL foosExist = ^BOOL {
return self.foos.count > 0; // self inside block
}();
此外,当底层变量 _foos 引用内部块到 foos 属性时,编译器声明:
Block 隐式保留“self”;明确提及“self”以表明这是预期行为。
块内的这个 self 真的会创建保留循环吗?如果不是,为什么?有人可以详细说明吗?
【问题讨论】:
-
为什么创建一个块只是为了立即运行它?
-
@newacct 我相信它的设计是为了提高可读性并减少对象的可变性(块范围之外)。 Blocks 中的 LoC 多于 5 个。
标签: ios objective-c memory-leaks retain-cycle