李岡諭*_*李岡諭 8 recursion aop block objective-c
我想声明一个块类型,它采用一个相同块类型的参数.它就是这样的:
typedef void (^BlockInBlock) (BlockInBlock block);
Run Code Online (Sandbox Code Playgroud)
我知道声明无效.但我想知道是否有任何可能的方法来实现递归块,它只采用一个相同块类型的参数.
我正在尝试使用块在Objective-C中找到一种实现面向方面编程(AOP)的方法.以下是关于如何实现这一点的问题.
进一步的问题1:
如何实现一个可变参数函数,它接受我上面描述的许多块并最终结束nil,并且我可以使用多个块调用该函数,直到遇到nil?它会是这样的:
@interface NSObject(AOP)
- (void) invokeBlockInBlock:(BlockInBlock) headBlock, ...{
va_list blockList;
va_start(blockList, headBlock);
// Invoke recursive blocks here until the value of va_arg(blockList, BlockInBlock) is nil
// it would be like: block1(self, block2(self, block3(self, block4(...))));
va_end(blockList);
}
@end
Run Code Online (Sandbox Code Playgroud)
进一步的问题2:
如果递归块有返回值怎么办?
关于C语言的其他问题:
是否可以声明一个C函数,它接受一个C函数指针的参数,而C函数指针的函数也需要另一个C函数指针?
hol*_*lex 11
可能与您正在寻找的相似:
typedef void (^Block)(id);
Run Code Online (Sandbox Code Playgroud)
从字面上看,它会导致无限递归循环:
Block _block;
_block = ^(Block block) {
if (block) block(block);
};
_block(_block);
Run Code Online (Sandbox Code Playgroud)
但是,参数可以是任何id不仅完全相同的参数Block,但它表示如何将同一块作为参数传递给同一块.
所以,这就是主意.
| 归档时间: |
|
| 查看次数: |
3825 次 |
| 最近记录: |