第十四篇:OC中block存储代码块的定义与应用

来源:互联网 发布:ubuntu上安装mysql5.7 编辑:程序博客网 时间:2024/06/04 18:15

1.如何定义block变量,形式:返回值类型 (^block变量名)(参数)

》形式一求和的block变量: int (^sumBlock)(int , int ) ;

》形式二:void (^voidBlock)() ;


2.如何利用block封装代码:

 ^(int a , int b) {

   return a + b ;

}  ; // 有一个分号“ ; ”


^(){ 

NSLog(@"--------------------");

} ;

^{ // 没有参数括号可以省略 

NSLog(@"--------------------");

} ;


3. block 访问外面变量规则:

》block 内部可以访问外面的变量。

》默认情况下,block 内部不能修改外面的局部变量;但可以修改全局变量。

》给局部变量加上 __block 关键字,那么这个局部变量就可以在block 内部修改。


4. 利用 typedef 定义block 类型:

》typedef int (^MyBlock)(int , int ) ;

// 以后就可以利用MyBlock这种类型来定义block变量。

MyBlock b1  ;

b1 = ^(int a , int b ){

      return a - b ;

}  ;

MyBlock b2 = ^(int a , int  b) {

         return a + b ;

} ;


5.例子:

#import <Foundation/Foundation.h>typedef int (^MyBlock)(int,int); // block类型int cc =9 ;int main(int argc, const char * argv[]) {        int a = 20 ;    __block int b = 100 ;    void (^voidBlock)() = ^{        NSLog(@"------------");        //在bloc体内不能修改非__block声明的局部变量,可以修改全局变量和用__block声明的局部变量        //a = 10;        b = 50 ;        cc = 111;    };    NSLog(@"%d %d %d",a,b,cc);    voidBlock();    NSLog(@"%d %d %d",a,b,cc);                    int (^sumBloc)(int , int);    sumBloc= ^(int a,int b){                return a+b;    };    int (^subBloc)(int,int) = ^(int a,int b){        return a - b ;    };        int sum = sumBloc(10,90);    int sub = subBloc(10,90);        NSLog(@"sum = %d sub = %d",sum,sub);        voidBlock();            //------ typedef block类型用法------------        MyBlock sum1 = ^(int a,int b){        return a + b ;    };        MyBlock sub1 ;    sub1 = ^(int a ,int b){        return a - b ;    };        NSLog(@"sum1 = %d sub1 = %d",sum1(10,20),sub1(20,10));        return 0;}


0 0