我试图以一种方式使用块,我提供对保留块的对象的引用,如下所示:
typedef void(^RunBlock)(__weak Thing *block_owner, ThingFinishBlock finish);
其中Thing
的属性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
作为前缀是否安全,或者这会导致保留循环吗?我不确定,因为指针在typedef中已经被定义为__weak
,并且给定的参数已经是__weak
。
^(__weak Thing *owner ...){ ... }
与
相反^(Thing *owner, ...) { ... }
谢谢!
答案 0 :(得分:0)
不,参数中的__weak
不是函数类型本身的一部分。
typedef void(^RunBlock)(__weak Thing *block_owner, ThingFinishBlock finish);
与
相同typedef void(^RunBlock)(Thing *block_owner, ThingFinishBlock finish);
这是您实现参数中__weak
重要的块的地方。
另外,我不知道为什么你认为这与保留周期有关。