Objective c 提供弱引用时,块参数是否需要指定所有权限定符?
我试图以一种方式使用块,即提供对保留块的对象的引用,如下所示:Objective c 提供弱引用时,块参数是否需要指定所有权限定符?,objective-c,cocoa,objective-c-blocks,Objective C,Cocoa,Objective C Blocks,我试图以一种方式使用块,即提供对保留块的对象的引用,如下所示: typedef void(^RunBlock)(__weak Thing *block_owner, ThingFinishBlock finish); 其中Thing具有类型为RunBlock的属性run\u block Thing *thing = [Thing thingWithBlock^(Thing *owner, ThingFinishBlock finish) { ... }]; 从对象中调用run\u块,如下所示
typedef void(^RunBlock)(__weak Thing *block_owner, ThingFinishBlock finish);
其中Thing
具有类型为RunBlock
的属性run\u block
Thing *thing = [Thing thingWithBlock^(Thing *owner, ThingFinishBlock finish) { ... }];
从对象
中调用run\u块
,如下所示:
__weak typeof(self) this = self;
_finish_block = ^(){ ... }
self.run_block(this, _finish_block);
所以我现在想知道的是,定义run\u块
的第一个参数Thing*owner
而不在其前面加上\uu-weak
,是否安全,或者这会导致一个retain循环?我不确定,因为指针已经在typedef中定义为\uuuu弱
,并且给定的参数已经是\uu弱
^(__weak Thing *owner ...){ ... }
相对于
^(Thing *owner, ...) { ... }
谢谢 否,
参数中的弱
不是函数类型本身的一部分
typedef void(^RunBlock)(__weak Thing *block_owner, ThingFinishBlock finish);
与
typedef void(^RunBlock)(Thing *block_owner, ThingFinishBlock finish);
在这里,您实现了参数中的\uu弱
起作用的块
而且,我不知道你为什么认为这与保留周期有关