美文网首页
block的使用

block的使用

作者: MIUI轩 | 来源:发表于2017-05-22 13:38 被阅读0次

    目前Block已经广泛应用于iOS开发中,常用于GCD、动画、排序及各类回调

    注: Block的声明与赋值只是保存了一段代码段,必须调用才能执行内部代码

    Block变量的声明、赋值与调用

    Block变量的声明

    Block变量的声明格式为: 返回值类型(^Block名字)(参数列表);
    // 声明一个无返回值,参数为两个字符串对象,叫做aBlock的Block
    void(^aBlock)(NSString *x, NSString *y);
    // 形参变量名称可以省略,只留有变量类型即
    void(^aBlock)(NSString *, NSString *);
    

    Block变量的赋值

    Block变量的赋值格式为: Block变量 = ^(参数列表){函数体};
    aBlock = ^(NSString *x, NSString *y){
    NSLog(@"%@ love %@", x, y);
    };
    
    声明Block变量的同时进行赋值
    int(^myBlock)(int) = ^(int num){
    return num * 7;
    };
    // 如果没有参数列表,在赋值时参数列表可以省略
     void(^aVoidBlock)() = ^{
    NSLog(@"I am a aVoidBlock");
            };
    
    
    
    
    
    // 调用后控制台输出"Li Lei love Han Meimei"
    aBlock(@"Li Lei",@"Han Meimei");
    // 调用后控制台输出"result = 63"
    NSLog(@"result = %d", myBlock(9));
    // 调用后控制台输出"I am a aVoidBlock"
    aVoidBlock();
    
    在Block内部定义的变量,会在作用域结束时自动释放,Block对其并没有强引用关系,且在ARC中只需要避免循环引用即可,如果只是Block单方面地对外部变量进行强引用,并不会造成内存泄漏

    注: 关于下划线下划线block关键字在MRC和ARC下的不同
    __block在MRC下有两个作用

    1. 允许在Block中访问和修改局部变量
    2. 禁止Block对所引用的对象进行隐式retain操作

    __block在ARC下只有一个作用

    1. 允许在Block中访问和修改局部变量

    相关文章

      网友评论

          本文标题:block的使用

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