1

我正在尝试以提供对保留块的对象的引用的方式使用块,如下所示:

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, ...) { ... }

谢谢!

4

1 回答 1

0

不,__weakin 参数不是函数类型本身的一部分。

typedef void(^RunBlock)(__weak Thing *block_owner, ThingFinishBlock finish);

是相同的

typedef void(^RunBlock)(Thing *block_owner, ThingFinishBlock finish);

这是您实现__weak参数中重要的块的地方。

另外,我不知道您为什么认为这与保留周期有关。

于 2013-06-27T23:17:42.310 回答