共18条回复
2楼
·
adad184
回复于 2013年11月21日
返回值为一个block的block?
3楼
·
adad184
回复于 2013年11月21日
The complexBlock variable refers to a block that takes another block as an argument (aBlock) and returns yet another block.
4楼
·
5楼
·
6楼
·
adad184
回复于 2013年11月21日
void (^( ^complexBlock )( void (^)(void) )) (void)
你看有几个^ 就表示有几个block
void (^)(void)
是block 做为complexBlock的参数
你可以记为 blockArg
void (^( ^complexBlock )( blockArg )) (void)
则
( ^complexBlock )( blockArg )
是block的名称和参数部分 记为 blockBody
void (^blockBody) (void)
这个 就是一个block的定义了
上面的意思是 blockBody的返回值是一个block 参数为void 返回值为void
这是一种C语言的定义方法 类似返回函数指针的函数指针... 就是这个样子..
其实这种写法是可读性非常差的.... 可以用typedef 先预定义block类型 会比较好
typedef void (^argBlock)(void);
typedef void (^returnBlock)(void);
其实文档里也说了 rewrite the code 类似如下
returnBlock (^complexBlock)(argBlock) = ^ (argBlock aBlock) {
...
return ^{
...
};
};
7楼
·
saiyagg
回复于 2013年11月21日
嗯,非常感谢,你的思路很清晰,我也看的差不多了,但还有几个细节需要请教下:
- 整体 void (^blockBody) (void) 定义中 blockBody 为block的名字,这个应该是个字符串,按照你的理解,这个blockBody 是一个block, 这个点怎么理解?
- 作为 blockBody 的
( ^complexBlock )( blockArg),是一个block,对于这点,我的疑问是可以用一个block来做另一个block的名字吗?如果可以,这个block( ^complexBlock )( blockArg )可以不需要申明返回类型吗? void (^blockBody) (void)这个是整体的结构,可以看出返回值和参数都是void, 那函数体代码中的参数和返回值都是block,这点儿怎么理解呢?
8楼
·
本帖有18个回复,因为您没有注册或者登录本站,所以只能看到本帖的10条回复。如果想看到全部回复,请注册或者登录本站。