美文网首页
Block的基本使用

Block的基本使用

作者: Coder007 | 来源:发表于2016-05-14 19:49 被阅读80次

    block基本使用

    • 在日常的开发中,我们经常会用到block,或者说是使用block来减少我们的代码量,比如说:控制器之间的传值,虽然使用代理等也可以实现,但是使用代理的时候代码量比较大,这个时候使用block就会很方便。
    • 最常用的就是在处理网络请求的时候,有返回值的时候需要执行的代码,自己封装的时候通常都是使用block(当然了,AFNetworking内部就是使用了大量的block)
    • block的作用:block的作用和函数和方法很像,就是用来保存一段代码,等到需要的时候再去调用

    block的定义

    • 想知道Block如何定义??在Xcode中输入inlineBlock,将会出现的代码段就是Block的定义方法.
    returnType(^blockName)(parameterTypes) = ^(parameters) {
        statements
    };
    
    // 注意:当有参数的时候,左右两边的写法是不一样的,左边只需要参数的类型,不需要参数名,但是右边的需要参数类型和参数
    
    // 有返回值有参数的
    返回值(^block名称)(参数列表) = ^(参数列表){
    
    };
    //没有返回值有参数
    void(^block名称)(参数列表) =^(参数列表){
    
    };
    //没有返回值没有参数
    void(^block名称)() = ^{
    
    };
    
    

    使用

    • 定义成属性
      • 定义成属性的时候需要使用copy,也不需要带“*
      • 在ARC中可以使用strong和copy,但是在MRC中只能使用copy
    // 第一种方法
    // 先定义一个别名
    typedef void(^YWBlock)(NSString *name);
    // 声明一个属性
    @property(nonatomic, copy) YWBlock ywBlock;
    
    // 第二种方法
    // 直接写在属性中
    @property(nonatomic, copy) void(^YWBlockType)(NSString *name);
    
    • 方法中的参数
    // 推荐使用这种方法,block的定义写在方法声明中,这样看起来比较直观
    // 在方法实现的时候能看到里面有什么参数,是什么类型的
    - (void)testWithSuccess:(void(^)(NSString *str1, int tt))success;
    
    // 这种方式声明的也没错,但是阅读性不好
    // 在方法实现中也不好用
    typedef void(^failedBlock)(NSString *str1, int tt);
    - (void)testWithFailed:(failedBlock)failed;
    
    

    相关文章

      网友评论

          本文标题:Block的基本使用

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