zoukankan      html  css  js  c++  java
  • 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语法块

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

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

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

      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
    著作权归作者所有,转载请联系作者获得授权,并标注“简书作者”。
  • 相关阅读:
    训练集(Train),验证集(Validation)和测试集(Test Sets)以及交叉验证法
    看完了这篇实时数仓建设,才发现以前的都白看了(内有美团案例)
    PA模块常用表
    Workflow相关表简单分析
    总账balance表
    工作流转发功能实现
    iOS 使用AVAudioPlayer开发录音功能
    利用HTP工具包开发报表
    关于会话、进程、请求的几个常用SQL
    一些常用到的键弹性域和存其代码组合的表
  • 原文地址:https://www.cnblogs.com/cy568searchx/p/6247882.html
Copyright © 2011-2022 走看看