美文网首页
block的简单简介

block的简单简介

作者: 三岁就很乖 | 来源:发表于2017-03-12 15:36 被阅读27次

    1、block的声明

    void(^block)();
    

    2、block的三种定义

    三种方式 = ^(参数){  
    }
    
    a.void(^block1)() = ^(){
    
    }
    //如果没有参数 参数可以隐藏。如果有参数,定义的时候,必须要写参数,而且必须要有参数变量名
    b.
    void(^block2)() = ^{
    }
    void(^block2)(int) = ^(int a) {
    }
    //bock返回值可以省略,不管有没有返回值都可以省略
    c.int(^block3)() = ^int{
      return 3;
    }
    

    3、bolck的用处

    a. 封装模型方法
    b.传值
    

    传值

    只要能拿到对方就能传值
    顺传:给需要传值的对象,直接定义属性就能传值
    逆传:用代理,block
    

    4、block的存储

    只要block没有引用外部局部变量,block放在全局区。
    
    MRC管理block:
            只要block引用外部局部变量,block就放在栈区。
            block只能使用copy,不能使用retain,使用retain,block还在栈里面。
    ARC管理block:
            只要arc引用外部局部变量,block放在堆里面。
            block使用strong,尽量不要用copy。
    

    5、block会造成循环引用

    block会对里面所有强指针变量都强引用一次。
    

    6、其他

    a.如果是局部变量,block是值传递。
    
     int a = 3;
    void (^block)() = ^{
      NSLog(@"%d",a);
    }
    a = 5;
    block();
    
    //打印输出a = 5
    
    b.如果是静态变量,block是指针传递```
    

    static int a = 3;
    void (^block)() = ^{
    NSLog(@"%d",a);
    }
    a = 5;
    block();

    //打印输出a = 3

    c.如果是全局变量,_ _block修饰的变量,block是指针传递

    
    
    
    

    相关文章

      网友评论

          本文标题:block的简单简介

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