Block代码块

 

一、block基本语法

 

1、定义块必须以^开头

2、定义块的返回值类型可以省略,而且经常会省略声明块的返回值类型

3、定义无须制定名字

4、如果快没有返回值,块无需带参数,通常建议使用void作为占位符

定义块格式:返回值类型(^block名称)(形参列表)=^(形参列表){};

代码块可以进行复用,可以反相传值。

例1:先声明、再实现。

//block声明格式:返回值声明(^block名字)(形参列表)
int (^myFun)();
 
//实现格式:block名字=^(形参列表){};
myFun =  ^(){
            NSLog(@"这是一个代码块");
            return 1;
        };
 
//调用:block名称(形参列表),有返回值的block可以用一个变量进行接收。
int a = myFun();
       
NSLog(@"%d",a);
 
例2:
//有返回值、有形参、声明和实现放在一起

int (^sumblock)(int a,int b)=^(int a,int b){

            return  a+b;

        };

//调用

        int sum=sumblock(10,20);

        NSLog(@"sum=%d",sum);

 
例3:
//返回类型是字符串格式:  NSString *(^名字)(形参列表)

NSString *(^charblock)(NSString *s)=^(NSString *s){

            NSLog(@"s=%@",s);

            return  s;

        };

        charblock(@"字符串");

 

例4:
//定义一个局部变量,要在block进行值的改变

__block int a=0;

        void(^myblock1)()=^(){

            a++;

        };

 
例5:
//定义一个全局变量,在block进行值的改变

static int e;

        void (^myblock3)()=^(){

            e++;

        };

 

二、block作为函数的参数调用
 
例1:

#import <Foundation/Foundation.h>

 

void fun(int(^myblock)(int a,int b)){

    int mul=myblock(4,5);

    NSLog(@"mul=%d",mul);

}

 

int main(int argc, const char * argv[]) {

    @autoreleasepool {

        //调用方法1:

        int (^myblock1)(int c,int d)=^(int a,int b){

            return a*b;

        };

        fun(myblock1);

 

        //调用方法2

        fun(^int(int a, int b) {

            return a*b;

        });

  }

    return 0;

}

 

例2:
#import <Foundation/Foundation.h>
 
 

//字符串作为函数调用 方法1

void fun1(NSString *(^block)(NSString *s)){

    NSString *s=@"这是一个字符串";

    NSLog(@"s1=%@",block (s));

}

 

//字符串作为函数调用 方法2

void fun2(NSString *(^block2)(NSString *s),NSString *s2){

    NSLog(@"s2=%@",block2(s2));

}

 

int main(int argc, const char * argv[]) {

    @autoreleasepool{

//字符串作为函数调用 方法1

        

        NSString *(^block1)(NSString *s)=^(NSString *s1){

            

            return s1;

        };

        fun1(block1);

        

        

        //字符串作为函数调用 方法2

        fun2(^NSString *(NSString *s) {

            return s;

        }, @"这是一个字符串");

            

    }

    return 0;

}

 

 
 
 
 
posted on 2015-11-04 13:53  子嫣然兮  阅读(176)  评论(0编辑  收藏  举报