两种方法可以实现,一种是参考zenny_chen所说的全局的或都static的block可以实现
http://www.cocoachina.com/bbs/read.php?tid-9222-fpage-3.html int main(void) { void (^p)(int) = 0; static void (^ const blocks)(int) = ^(int i){ if(i > 0){ puts("Hello, world!"); blocks(i - 1); } }; p = blocks; p(2); } 另外找到一种方法就是直接将block块也用__block来进行声明就可以了。 int main(void) { __block void (^blocks)(int); blocks = ^(int i){ if(i > 0){ puts("Hello, world!"); blocks(i - 1); } }; blocks(2); }