我正在尝试以提供对保留块的对象的引用的方式使用块,如下所示:
typedef void(^RunBlock)(__weak Thing *block_owner, ThingFinishBlock finish);
whereThing
有一个run_block
类型的属性RunBlock
。
Thing *thing = [Thing thingWithBlock^(Thing *owner, ThingFinishBlock finish) { ... }];
run_block
从内部调用是Thing
这样的:
__weak typeof(self) this = self;
_finish_block = ^(){ ... }
self.run_block(this, _finish_block);
所以我现在想知道的是,定义run_block
' 的第一个参数Thing *owner
而不使用前缀是否安全__weak
,或者这会导致保留循环?我不确定,因为指针已经__weak
在 typedef 中定义,并且给定的参数已经是__weak
.
^(__weak Thing *owner ...){ ... }
相对于
^(Thing *owner, ...) { ... }
谢谢!