简述block

block传值也适用于从后往前传值

先介绍block的基本知识

/**
 *  1、如何定义一个Block变量
    2、怎样给定义的Block变量赋初值
    3、如何冲定义Block类型
    4、如何使用Block实现具体的佛那个能
    5、Block与变量作用域的关系
 */

int sum(int a, int b) {
    return a + b;
}

int count = 100;

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

    /**
     *  1、Block是一种数据类型,并且是一种自定义的数据类型
        2、Block的标志是^(托字符)
        3、Block是匿名函数,TA与函数最主要的区别在于,函数在编译器就已经知道封装了什么功能,但是Block只有当执行时才知道内部封装的功能,所以说Block更加灵活多变
        4、Block的作用也是封装代码段来实现具体的功能
        5、既然Block是匿名函数,所以赋值时,不能将函数名直接赋值,初值为函数的实现体
     */

    __block int a = 6;

    void (^testBlock)() = ^ {
        NSLog(@"%d",a);//Block内部可以访问局部变量的值

        a = 9; //Block内部如果想修改外界局部变量的值,必须对变量进行__block修饰

        count = 101;//Block内部可以直接修改全局变量的值,也可以直接访问全局变量的值
    };
    testBlock();
    NSLog(@"a = %d, count = %d",a, count);

    int (*p)(int, int) = sum;
    typedef int (*P)(int, int);

    //myBlock是一个有参有返的匿名函数
    //myBlock是变量名
    //Block类型为 int (^)(int , int),表示此Block为有一个整型返回值,两个整型参数的匿名函数
    //初值为:
//    ^(int a, int b) {
//        return  a + b;
//    }

    /**
     *  书写格式
        1、初值中的返回值类型可以省略不写,但是必须保证,函数内部返回给外界的值的类型与返回值类型相同
        2、定义Block变量的类型中,参数名可以省略不写,但是初值中参数名不能不写,否则无法参与运算
        3、如果Block没有参数,那么在初值中表示参数的小括号可以省略不写
     */
    typedef int (^MyBlock)(int, int);

    int (^myBlock)(int, int) = ^(int a, int b) {
        return  a + b;
    };//Blocl实现
    NSLog(@"result is %d",myBlock(10, 20));//Block执行

    MyBlock subBlock = ^(int a, int b) {
        return a - b;
    };

    void (^helloBlock)() = ^ {
        NSLog(@"hello world");
    };

    //将字符串转整型
    int (^intBlock)(NSString *) = ^(NSString *string) {
        return [string intValue];
    };

    NSComparisonResult (^compareBlock)(NSString *, NSString *) = ^(NSString *str1, NSString *str2) {
        return [str1 compare:str2];
    };

    NSLog(@"%ld",compareBlock(@"a", @"b"));
    helloBlock();
    NSLog(@"%d",intBlock(@"123"));

    return 0;
}
时间: 2024-08-19 23:51:27

简述block的相关文章

linux基础学习-9.1-文件属性之inode和block

1.inode 1)怎么来的 格式化创建文件系统的时候诞生的. 2)啥意思 index node 索引节点 inode是用来存放文件的属性信息,block的位置 inode号码(数字) 3)特点 1#linux里面创建一个非空文件要占用一个inode和至少1个block 4)查看 [[email protected] ~]# ls -lhi /etc/hosts 915740 -rw-r--r--. 2 root root 158 Jan 8 2018 /etc/hosts #系统中inode一

Spark 学习: spark 原理简述与 shuffle 过程介绍

Spark学习: 简述总结 Spark 是使用 scala 实现的基于内存计算的大数据开源集群计算环境.提供了 java,scala, python,R 等语言的调用接口. Spark学习 简述总结 引言 1 Hadoop 和 Spark 的关系 Spark 系统架构 1 spark 运行原理 RDD 初识 shuffle 和 stage 性能优化 1 缓存机制和 cache 的意义 2 shuffle 的优化 3 资源参数调优 4 小结 本地搭建 Spark 开发环境 1 Spark-Scal

iOS开发路线简述

如果您觉得本站对您能有帮助,您可以使用RSS或邮件方式订阅本站,这样您将能在第一时间获取本站信息. iOS系统以及iPhone的出来都要感谢乔布斯,一个完美主义者,从如此优秀的iOS系统和iPhone就可以看出来.下面就简单介绍一下我iOS开发的感受,也是学习iOS开发的一个体系架构. 1.iOS开发环境 1.1 开发环境 标准的配置是MacOSX+Xcode. MacOSX的话首选用苹果电脑,Macmini最便宜只要4000多就好了然后自己配一个显示器,MacBookPro 也可以,不推荐使用

简述组件化解决方案CTMediator与MGJRouter的主要思想

简述CTMediator CTMediator按照功能的结构来讲,使用时需要实现CTMediator的个三部分. 1.CTMediator类:承担总枢纽,总调度的责任 2.Target_(ModuleName)类:承担组件对外暴漏接口功能,组件要提供什么服务,主要在它的接口声明上进行体现 3.CTMediator+(ModuleName)分类:主要供客户端使用,里面声明了可以调用的组件接口. 下面详细讲解 Part1: CTMediator核心功能实现: CTMediator主要采用target

简述iptales四表五链及详细介绍iptables命令使用方法

简述iptales四表五链及详细介绍iptables命令使用方法 简述iptables四表五链(1)四表 filter:过滤规则表,根据定义的规则过滤符合条件的数据包 nat表:network address translation 地址转换规则表 mangle:修改数据标记规则表 raw:关闭nat表上启动的连接跟踪制,加快封包穿越防火墙的速度 (2)五chain(链) INPUT OUTPUT FORWARD PREROUTING POSTROUTING (3)表<-->链的关系 raw:

Hibernate简述及入门实例

一.Hibernate简述 总的概括,Hibernate是一个ORM的轻量级持久层框架,解决了对象和关系数据库中表的不匹配问题(阻抗不匹配)以及拥有开发代码不用去继承hibernate类或接口的优势(无侵入性).hibernate框架实现使得开发人员可以避免反复地编写javajdbc部分代码,应用面向对象的思维操作关系型数据库. 二.使用myeclipse创建hibernate实例两种方法(以hibernate3.5.2及mysql为例) a)手动编写hibernate.cfg.xml及*.hb

iOS block从零开始

iOS block从零开始 在iOS4.0之后,block横空出世,它本身封装了一段代码并将这段代码当做变量,通过block()的方式进行回调. block的结构 先来一段简单的代码看看: void (^myBlock)(int a) = ^(int a){ NSLog(@"%zd",a); }; NSLog(@"旭宝爱吃鱼"); myBlock(999); 输出结果: 2016-05-03 11:27:18.571 block[5340:706252] 旭宝爱吃鱼

嵌入式&amp;iOS:回调函数(C)与block(OC)传 参/函数 对比

C的回调函数: callBack.h 1).声明一个doSomeThingCount函数,参数为一个(无返回值,1个int参数的)函数. void DSTCount(void(*CallBack)(int data_i32)); callBack.c 1).在doSomeThingCount函数,对运行次数自增,并调用参数--函数. void DSTCount(void(*CallBack)(int data_i32)) { static int numb = 0; numb++; (*Call

iOS学习之代码块(Block)

代码块(Block) (1)主要作用:将一段代码保存起来,在需要的地方调用即可. (2)全局变量在代码块中的使用: 全局变量可以在代码块中使用,同时也可以被改变,代码片段如下: 1 int local = 1;//注意:全局变量 2 void (^block0)(void) = ^(void){ 3 local ++; 4 NSLog(@"local = %d",local); 5 }; 6 block0(); 7 NSLog(@"外部 local = %d",lo