ios block回调的理解和总结

1. block回调与其他2种回调方式的区别
  1) IOS常用回调方式有3种,如:delegate、NSNotificationCenter和block。

  2) 通知:
    (一对多)在APP中,很多控制器都需要知道一个事件,应该用通知;

  3) delegate:
    “一对一”,对同一个协议,一个对象只能设置一个代理delegate,所以单例对象就不能用代理;block没有协议方法,也不需要delegate代理对象
    代理更注重过程信息的传输:比如发起一个网络请求,可能想要知道此时请求是否已经开始、是否收到了数据、数据是否已经接受完成、数据接收失败

  4) block:
    写法更简练,不需要写protocol、函数等等
    block注重结果的传输:比如对于一个事件,只想知道成功或者失败,并不需要知道进行了多少或者额外的一些信息
    一对一,与代理类似,但是block没有协议方法,也不需要delegate代理对象

    block需要注意防止循环引用:

      ARC下这样防止:
__weak typeof(self) weakSelf = self;
  [yourBlock:^(NSArray *repeatedArray, NSArray *incompleteArray) {
       [weakSelf doSomething];
    }];
    补充: 这三种通信方式都实现了对象之间的解耦合。(解耦合就是两个对象建立了一种通信关系,但是它们没有关联得特别紧。也可以说是他们没有依赖于某一个对象)

2. 什么情况下使用block回调或delegate回调

  1) 公共接口,方法较多也选择用delegate进行解耦(iOS有很多例子比如最常用tableViewDelegate,textViewDelegate)

  2) 异步和简单的回调用block更好 (iOS有很多例子比如常用的网络库AFNetwork,ASIHTTP库,UIAlertView类)

  3) 它们都是为了在具体的实现Delegate或Block中再进行处理,属于策略模式,具体算法在具体算法类中实现。


3. block回调的设计步骤

    1) 先声明: #type void(^MyBlock) (int a,int b)

    2) 定义声明的block

    - (void)viewDidLoad
    {
        [super viewDidLoad];
        [self blockTest:^(int a, int b) {
            int c = a + b;
            NSLog(@"步骤2:%i",c);  //回调函数,这里是先执行步骤1的函数
        }];
    }

    3) 调用block

    - (void)blockTest:(MyBlock )myBlock
    {
        NSLog(@"步骤1");
        myBlock(10,20);
    }


4. block回调例子

  1) 例子1:

    /**
     *  需求:在cel
  • 0
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值