Object C中Block用法

先了解定义C语言的函数指针!函数

 1 int sum (int x, int y) {
 2 return x+ y;
 3 }
 4 // 定义函数
 5 int (*p)(int, int) = sum;
 6 NSLog(@"%ld", p(2, 5));
 7 
 8 // 函数指针类型: int (*)(int, int);
 9 // 函数指针变量: p;
10 // 函数指针的值: sum

 

看看block语法学习

1  block类型: int(^)(int, int)  
2  block变量: block
3  block值: ^(int x, int y){ 
4   return x + y ;
5 };

 

定义block语法块spa

1 int (^block) (int , int) = ^(int x, int y) {
2 return  x + y;
3 }
4 NSLog(@"%d", block(3, 5));

 

效果和上边的函数指针同样! 参照起来学习方便!指针

  • 无返回值, 无参数 block 语法code

    1 void(^block1)(void) = ^(void) {
    2   NSLog(@"无返回值, 无参数");
    3   }  
    4   // 调用block1
    5   block1();

     

  • 有返回值, 无参数
    1 int(^block2)(void) = ^(void) {
    2   return 1;
    3   }
    4   NSLog(@"有返回值, 无参数%d",  block2());

     

  • 无返回值, 有参数
    1 void (^block3)(int, int) = ^(int x, int y){
    2 NSLog(@"%d + %d = %d", x, y, x +y);
    3 };
    4 调用
    5 block3(3, 5);

     

  • 有返回值, 有参数
    1 int (^block4)(int , int) = ^(int x, int y) {
    2 return x + y;
    3 }
    4 block 调用
    5 NSLog(@"%d", block4(3, 5));

     

block 与变量的关系
  • block 与 局部变量的关系
    1 int temp = 100;
    2 void (^block1)(void) = ^(void) {
    3 NSLog(@"%d", temp++);
    4 NSLog(@"%d", temp + 1);
    5 }

     

    调用 block1();
    若是按照以上代码, 第一个打印会报错!! 由于对temp进行了操做, 也就是说在block中是不能修改局部变量的值的! 而第二个打印却不会报错, 说明block中能够调用局部变量! 那怎样才能在block中修改局部变量的值呢?
    1 __block int temp2 = 200; 用__block修饰一下变量, 便在block能够使用了
    2 __block int temp2 = 200;
    3 void (^block9) (void) = ^(void){
    4   temp2++; // 这样就能够修改了! 
    5   };
    6  调用 block9();  
    7  结果 201;

     

  • block与全局变量.
    1 在main函数外定义一个在main函数外定义一个temp3 = 300;
    2 void (^block11) (void) = ^(void){
    3  temp3++;
    4  NSLog(@"temp3 = %d", temp3 + 1);
    5 };    
    6 调用 block11();
    7 结果 temp3 = 301;

     


    说明block中能够修改全局变量!



文/安静的等待(简书做者) 原文连接:http://www.jianshu.com/p/abb1eafeb068 著做权归做者全部,转载请联系做者得到受权,并标注“简书做者”。
相关文章
相关标签/搜索