Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/objective-c/25.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/cocoa/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Objective c 提供弱引用时,块参数是否需要指定所有权限定符?_Objective C_Cocoa_Objective C Blocks - Fatal编程技术网

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弱
起作用的块

而且,我不知道你为什么认为这与保留周期有关