美文网首页
block 的理解

block 的理解

作者: 西门淋雨 | 来源:发表于2018-08-23 11:10 被阅读24次

block语法

^ 返回值类型 ( 参数列表 ) {表达式};

    ^ void(NSInteger count){
        count ++;
    };

返回值类型可省略:

    //返回值为void
    ^ (NSInteger count){
        count ++;
    };
    //有返回值
    ^ (NSInteger coutt){
        return coutt++;
    };
    //当有返回值的时候,多个return的值类型必须相同
    ^ (NSInteger count){
        if (count < 0) {
            return count++;
        }else{
            return count--;
        }
    };
    //无参数时候,参数列表也可省略
    ^{
        return 100;
    };

block的声明:
返回值类型 (^ block的名字)(参数列表);

    NSInteger (^blk)(NSInteger k,NSInteger l) = ^ NSInteger(NSInteger k,NSInteger l){
        return k+l+2;
    };
    blk(6,2);
  //也可以省略参数名字
    NSInteger (^blk2)(NSInteger,NSInteger) = ^ NSInteger(NSInteger k,NSInteger l){
        return k+l+2;
    };
    blk2(6,2);
  //也可以如下
    NSInteger (^blk)(NSInteger,NSInteger) = ^(NSInteger k,NSInteger l){
        return k+l+2;
    };
    blk(6,2);

截取自动变量

- (void)testBlock{
    NSInteger qq = 100;
    NSInteger (^blk)(NSInteger,NSInteger) = ^ NSInteger(NSInteger k,NSInteger l){
        return k+l+qq;
    };
    qq = 200;
    blk(0,0);
    NSLog(@"value==%ld",blk(0,0));//value==100;
}

__block 说明符
上述已经表明,自动变量值获取只能保存执行block语法瞬间的值,保存后无法修改,__block可以去修改。

    __block NSInteger jk = 20;
    NSInteger (^blk2)() = ^ NSInteger(){
        jk = 30;
        return jk;
    };
    blk2();
    NSLog(@"value==%ld",blk2());//value==30;
    //不用__block修饰不能直接修改变量的值,但是可以使用。
    NSMutableArray *arr = [NSMutableArray arrayWithCapacity:0];
    void (^blk3)(void) = ^{
        NSObject *obj = [[NSObject alloc] init];
        [arr addObject:obj];
    };
    blk3();
    NSLog(@"===%@",arr);//arr增加了数据

相关文章

  • Block原理探究(上篇)-Block本质及存储域问题

    主要内容:1.理解Block的本质2.理解Block的存储域分类3.理解Block的Copy原理 一、探究Bloc...

  • iOS Swift 模型数组排序(仿写 sortedArrayU

    目的:为了加深对 block 的理解 个人理解:block 的返回值 NSComparisonResult 略带有...

  • block用法大全

    block语句块 如何解决block循环引用 高逼格理解block循环引用 block相关

  • block 的理解

    block语法 ^ 返回值类型 ( 参数列表 ) {表达式}; 返回值类型可省略: block的声明:返回值类型...

  • block的理解

    block的理解参照文章http://www.cnblogs.com/flyFreeZn/p/4264220.ht...

  • block的理解

    1..block的原理是什么?本质是什么? block本质上也是一个OC对象,它内部也有个isa指针,block是...

  • block 的理解

    实质上Block也是一个对象 二、内存分配区域: OC中的各个主要的内存分配区域:包括有--栈区、堆区、常量区、全...

  • Block的理解

    一、block的本质 block本质上也是一个OC对象,它内部也有一个isa指针block是封装了函数调用以及函数...

  • 理解Block

    一、block其实是有类型的, 且一共有3种类型, 全局块, 栈块, 堆块: 1.__NSGlobalBlock_...

  • 理解Block

    堆栈的区别:经典解释 原作者不详,未详细查询,从其它地方转载并修改部分叙述,特此说明 预备知识:程序的内存分配一个...

网友评论

      本文标题:block 的理解

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