美文网首页
OC学习之block

OC学习之block

作者: 龙马君 | 来源:发表于2016-03-18 10:59 被阅读47次
/**
 *  OC 的block,用于封装一段代码,可以在任何时候执行
 *  也可以作为函数参数和返回值
 *  block,在多线程、异步任务,集合遍历,集合排序、动画专场用得多
 *  跟C的函数指针很像
 *  格式:
    int (^myBlock)(int) = ^(int num){ return num * num; };
           |
    返回  block名称  参数     形参       block体            ;结尾
 *  使用:
 *  int x = myBlock(10, 20);
 */

/**
 *  返回int,参数传入int,int 的block类型
 *
 */
typedef int (^SubBlock)(int, int);


void testBlockUse(){
    
    /**
     *  无返回值和参数列表的block
     */
    void (^myPrintBlock)() = ^{
        NSLog(@"myPrintBlock");
    };
    myPrintBlock();
    
    /**
     *  返回int,参数传入int,int 的block
     *
     */
    int (^sumBlock)(int, int) = ^(int a, int b){
        return a + b;
    };
    NSLog(@"sumBlock = %d", sumBlock(12, 13));
    
    
    SubBlock subBlock = ^(int a, int b){
        return a - b;
    };
    NSLog(@"subBlock = %d", subBlock(12, 13));
    
    /**
     *  使用__block才可以修改外部变量,否则这能读取不能写入
     *  无使用__block时,block拷贝了变量的副本;
     *  使用__block时,block保存变量的指针;
     */
    int val = 0;
    __block int val1 = 0;
    
    int test1 = 0;
    __block int test2 = 0;
    void (^myBlock)() = ^{
        // 保存val1、test2 的指针
        // 保存val、test的变量副本
        printf("myBlock val = %d\n", val);          // val = 0
        printf("myBlock val1 = %d\n", val1);        // val1 = 0
        // val = 1; 不能修改
        val1 = 1;
    
        printf("myBlock test1 = %d\n", test1);      // test1 = 0
        printf("myBlock test2 = %d\n", test2);      // test2 = 10
    };
    
    test1 = 10;
    test2 = 10;
    
    myBlock();
    
    printf("val = %d\n", val);              // val = 0
    printf("val1 = %d\n", val1);            // val1 = 1
    
    printf("test1 = %d\n", test1);          // test1 = 10
    printf("test2 = %d\n", test2);          // test2 = 10
    
}

相关文章

  • OC学习之block

  • OC学习-block

    block是c语言的扩充功能。用一句话概括block的功能:带有局部变量的匿名函数。 block语法 ^ 返回值类...

  • swift 调用 OC中的block

    OC中声明block; OC中实现block swift中实现

  • 《OC之Block》

    由来:温故而知新可以为师矣。 一.Block的声明 二.Block的逆向传值 1:传值方-------------...

  • Swift 之闭包

    闭包 闭包类似于 OC 的 block,但是比 OC 的 block 应用面更广 在 OC 中 block 是匿名...

  • OC-简单粗暴理解Block的本质

    block简单粗暴的理解 OC的block底层就是个OC对象,包含isa指针,封装了函数的调用. OC的block...

  • iOS Block本质笔记

    OC中定义block block访问外部参数 OC转C++分析 block的变量捕获机制 为了保证block能够正...

  • Swift之闭包

    前言 闭包类似于OC的block,但是比OC的block应用面更广 在OC中block是匿名函数 在swift中函...

  • iOS&Swift&OC 闭包和Block的相互转化

    一、Swift的闭包 -> OC的block 二、OC的block -> Swift的闭包

  • iOS原生&JS交互

    OC 获取js中的key OC调用js方法 JS调用OC中不带参数的block JS调用OC中带参数的block ...

网友评论

      本文标题:OC学习之block

      本文链接:https://www.haomeiwen.com/subject/sloclttx.html