Objective-C Block语法递归函数实现

两种方法可以实现,一种是参考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); 

 
 
ps,最近使用block和配合G_C_D来写程序,实在是爽疯了。^_^ 
 
http://minik.blog.com/2011/08/12/objective-c-blockrecursive/ 
[backcolor=infobackground] 

时间: 2024-10-22 13:39:11

Objective-C Block语法递归函数实现的相关文章

BLOCK/字面量(语法糖)OC——第六天

1.//block ,块语法,实质是匿名函数,是对C语言中函数的扩充,扩展:     //block  语法可以用来保存一段代码或者用来调用一段封装好的代码:     //block  语法由于是C语言实现的,所以执行效率特别高:     //block 语法由来,借鉴了函数指针的语法 //block 的数据类型     /* 2.     返回值类型(^)(参数类型1,参数类型2,....):      注意:1.如果要定义的block没有参数,()也不能省掉                 

Swift语法专题七——函数

Swift讲解专题七--函数 一.引言         函数是有特定功能的代码段,函数会有一个特定的名称调用时来使用.Swift提供了十分灵活的方式来创建与调用函数.事实上在Swift,每个函数都是一种类型,这种类型由参数和返回值来决定.Swift和Objective-C的一大区别就在于Swift中的函数可以进行嵌套. 二.函数的创建与调用         函数通过函数名,参数和返回值来定义,参数和返回值决定一个函数的类型,在调用函数时,使用函数名来进行调用,示例如下: //传入一个名字 打印并

Swift语法专题八——闭包

Swift讲解专题八--闭包 一.引言         Swift中的闭包是有一定功能的代码块,这十分类似于Objective-C中的block语法.Swift中的闭包语法风格十分简洁,其作用和函数的作用相似. 二.从一个系统函数看闭包         Swift标准函数库中提供了一个sort排序函数,对于已经元素类型的数组,调用sort函数会进行重新排序并返回新的排序后的数组.这个sort函数可以接收一个返回值为Bool类型的闭包,来确定第一个元素是否排在第二个元素前面.代码示例如下: var

iOS进阶—— Block

花几分钟时间看下面三个小题目,写下你的答案. 这个三个小题目,我在整理此片博文之前给了三位朋友去解答,最后的结果,除了一位朋友 3 题全部正确,其他两个朋友均只答中 1 题. 说明还是有很多 iOS 的朋友对于 Block 并没有透彻理解.本篇博文会对 Block 进行详细的解说. 1 Block 使用的简单规则 先了解简单规则,再去分析原理和实现: Block 中,Block 表达式截获所使用的自动变量的值,即保存该自动变量的瞬间值. 修饰为 __block 的变量,在捕获时,获取的不再是瞬间

OC学习之道:关于Block的初级学习

转自:http://blog.csdn.net/qq_31810357 [objc] view plaincopy "code" class="OC">      //   //  main.m   //  Copyright (c) 2015年 tongxing. All rights reserved.   //      #import    #import "Student.h"   typedef int(^BlockType)(

深入浅出Cocoa多线程编程之 block 与 dispatch quene

深入浅出 Cocoa 多线程编程之 block 与 dispatch quene 罗朝辉(http://www.cppblog.com/kesalin CC 许可,转载请注明出处 block 是 Apple 在 GCC 4.2 中扩充的新语法特性,其目的是支持多核并行编程.我们可以将 dispatch_queue 与 block 结合起来使用,方便进行多线程编程. 本文源代码下载:点击下载 1,实验工程准备 在 XCode 4.0 中,我们建立一个 Mac OS X Application 类型

Swift的开发环境搭建以及基本语法详解_Swift

Swift环境设置在编写Swift程序之前,需要先设置好Swift开发环境.Swift提供了一个Playground平台用于学习目的,我们同样也需要设置.需要提供给 Xcode 软件的 Swift 编码在 Playground 中.如果熟悉Swift概念,那么可以使用Xcode IDE来做ISO/OS X应用程序的开发. 首先,需要在苹果开发者网站上的注册帐户(本教程假设你有开发者帐号). 如果已登录苹果网站,请访问以下链接: Download for Apple Developers 这将列出

深入浅出Block的方方面面

内容大纲: 1.Blocks概要 2.Blocks模式 3.Block实质(面试常问重点)   1.Blocks概要 什么是Blocks:Blocks是C语言的扩充的功能,可以用一句话来表示Blocks的扩充功能:带有局部变量(有的资料局部变量也叫自动变量)的匿名函数.这个函数叫block. (注意Blocks是一种功能,block是一种函数) 1-1.关于"匿名函数" 匿名函数:不带有名称的函数就是匿名函数.(但是C语言的标准不允许存在这样的函数.) 例如下面的源代码:在赋值给函数指

iOS - OC Block 代码块

前言 Block 是一段预先准备好的代码,可以在需要的时候执行,可以当作参数传递.Block 可以作为函数参数或者函数的返回值,而其本身又可以带输入参数或返回值.Block 是 C 语言的,类似于一个匿名函数,它和传统的函数指针很类似,但是 Block 是 inline(内联函数)的,并且默认情况下它对局部变量是只读的. 苹果官方建议尽量多用 Block.在多线程.异步任务.集合遍历.集合排序.动画转场用的很多. Block 语法 // Block as a local variable ret