zoukankan      html  css  js  c++  java
  • 12-Objective-C特有语法:(高效率)block数据类型

    一、         基本简介

    • block用来保存一段代码 

      block的标志:^

    • block可以作为函数参数或者函数的返回值,而其本身又可以带输入参数或返回值。
    • 苹果官方建议尽量多用block。在多线程、异步任务、集合遍历、集合排序、动画转场用的很多
    • block跟函数很像: 1.可以保存代码 2.有返回值 3.有形参 4.调用方式一样 (和函数又有区别,函数是在编译之前就已经定义好了,是写死了的东西,而block在运行时可以凭空的产生一段运行代码)


    二、        Block的特性

    • block特性

     1> 如何定义block变量

     int (^mySumBlock)(int, int);

     2> 如何利用block封装代码

     ^(int a, int b) {
        return a + b;
     };
    
     ^() {
        NSLog(@"----------");
     };
    
     ^ {
        NSLog(@"----------");
     };

     3> block访问外面变量

    以代码示例为例:

    void test3()
    {
        int a = 10;
    // 给局部变量加上__block关键字,这个局部变量就可以在block内部修改
        __block int b = 20;
        
        void (^block)();   
        
        block = ^{
            // block内部可以访问外面的变量
            NSLog(@"a = %d", a);
            
            // 默认情况下,block内部不能修改外面的局部变量
            // a = 20;
            
            // 给局部变量加上__block关键字,这个局部变量就可以在block内部修改
            b = 25;
        };        
        block();
    }

     4> 利用typedef定义block类型

      可先用typedef先声明类型,再定义变量进行赋值

     typedef int (^MyBlock)(int, int);  // 以后就可以利用MyBlock这种类型来定义block变量
    
     MyBlock block;
    
     MyBlock b1, b2;
    
     b1 = ^(int a, int b) {
        return a - b;
     };
    
     MyBlock b2 = ^(int a, int b) {
        return a - b;
     };
    • 与函数对比:

      es: 定义了一个叫MySum的blocks对象,它带有两个int参数,返回int。等式右边就是blocks的具体实现

      在声明的同时定义变量,然后赋值
    int (^MySumBlock)(int, int) = ^(int a, int b) {
      return a+b;
    };

     //    ps:   如果block没有形参,可以省略后面的()

         pk(对比一下)指向函数的指针:

    int sum(int a , int b)
    {
         return a + b;    
    }
    
    int main()
    {
          // 指针函数的指针
         int (*p)(int, int) = sum;
         int d = p(10, 12);
         NSLog(@"%d", d);
    }
        
  • 相关阅读:
    UVA232-纵横字谜的答案
    【SpringBoot】Re 02 Import与自定义装配实现
    【SpringBoot】Re 01 补充学习
    【ECharts】04 数据交互
    【ECharts】03 样式
    【ECharts】02 饼图
    【ECharts】01 快速上手
    【Mycat】01 概述
    【Git】05 分支管理
    【Git】04 文件删除
  • 原文地址:https://www.cnblogs.com/lszwhb/p/3720282.html
Copyright © 2011-2022 走看看