美文网首页
block在开发中的使用场景

block在开发中的使用场景

作者: eightzg | 来源:发表于2016-07-29 10:47 被阅读40次

block作为函数的参数

怎么判断参数是不是block
  • 看参数有没有,如果有,就是block参数
作为参数的block什么时候调用?
  • 当成参数的block并不是立即调用,而是由方法的内部决定,不用外界干预,比如UIView动画
Paste_Image.png
什么时候把block设计成参数?
  • 做的事情由外界决定,什么时候做有方法内部决定
下面用block作为参数实现一个简单计算器
  • 创建计算器管理者类CalculatorManager。在.h中声明:
/** 保存计算结果 */
@property (nonatomic, assign) NSInteger result;

// 计算方法,接收一个结果参数,将计算后的新的结果值返回出去
- (void)cacultor:(NSInteger(^)(NSInteger result))cacultorBlock;

  • 在.m中实现如下
- (void)cacultor:(NSInteger (^)(NSInteger))cacultorBlock {
    //用if语句做判断,防止访问不存在的block造成的坏内存访问
    if (cacultorBlock) {
      _result =  cacultorBlock(_result);
    }
}
  • 在窗口的根控制器的viewDidLoad中使用如下:
- (void)viewDidLoad {
    [super viewDidLoad];
    // 创建计算器管理者
    CacultorManager *mgr = [[CacultorManager alloc] init];
    [mgr cacultor:^NSInteger(NSInteger result) {
        result += 5;
        result -= 2;
        result *= 4;
        result /= 2;
        return result;
    }];   
    NSLog(@"%zd",mgr.result);
}
  • 打印结果是6
Paste_Image.png

block作为函数的返回值

  • block作为函数的返回值目的是替代放大,并且封装block的内部实现。
  • block作为函数的返回值的经典应用框架:Masonry。Masonry的编程思想是链式编程思想,使代码可读性好。
下面用block作为返回值实现一个复杂计算器
  • 首先同样创建计算器管理者类CalculatorManager。在.h中声明
/** 结果 */
@property (nonatomic, assign) int result;

/** 有参数有返回值的加方法 */
- (CalculatorManager *(^)(int))add;
  • 然后在.m中实现:
- (CalculatorManager *(^)(int))add
{
    //返回函数的返回值block
    return ^(int value){
        _result += value;
        //返回block的返回值CalculatorManager,在当前控制器就是self
        return self;
    };
}
  • 在窗口的根控制器的viewDidLoad中使用如下:
- (void)viewDidLoad {
    [super viewDidLoad];
    CalculatorManager *mgr = [[CalculatorManager alloc] init];
    //当mgr.add(5)执行完之后result结果是5,同时block返回CalculatorManager,可以继续add(5)
    mgr.add(5).add(5).add(5).add(5);
    
    NSLog(@"%d",mgr.result);
}

相关文章

  • block在开发中的使用场景

    block作为函数的参数 怎么判断参数是不是block 看参数有没有,如果有,就是block参数 作为参数的blo...

  • block开发中使用场景

    block 开发中使用场景 适合新手理解 熟悉 运用到项目中 block开发中使用场景 1.把block保存到对象...

  • Block的三种应用场景

    block开发中使用场景1.把block保存到对象中,恰当的时候才去调用2.把block当做方法的参数使用,外界不...

  • Block开发中使用场景

    block开发中使用场景 1.把block保存到对象中,恰当时机的时候才去调用 2.把block当做方法的参数使用...

  • block开发中的使用场景

    block声明定义快捷键:inlineblock block作用:帮你保存一份代码,等到恰当的时机才调用。 blo...

  • iOS开发 多视角抛析匿名函数—— Block

    一.Block的基本使用1.概念在iOS开发中Block的使用随处可见,使用场景也非常多,例如在网络中进行网络请求...

  • Objc Block实现分析

    Objc Block实现分析 Block在iOS开发中使用的频率是很高的,使用的场景包括接口异步数据的回调(AFN...

  • Block介绍及使用

    在实际开发中,使用Block比delegate和notification更简洁。于是在项目中会大量的使用block...

  • Block的常用场景

    本文简介 本文主要是总结了block在开发中的几种常用场景,如有不足的地方,还望指正。 Block简介 Block...

  • block开发使用场景

    block传值 利用block去代理代理传值 1. 代理传值 点击当前控制器Viewcontroller利用mod...

网友评论

      本文标题:block在开发中的使用场景

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