用Delegate或者是Block

在我做iOS,知道通常回调用 block 或者 delegate 来做,所以我一直就有几个问题,直到我看到了这文章,我觉得有好多想法和我走到一起的东西,也写写文章,来记录一下。

  • 什么时候用 block
  • 什么时候用 delegate
  • 后面出来的 block 那么强大,那么是不是它是不是可以完全取代delegate
  • 什么时候我是用 block 代替 delegate 用于回调 当刚开始用过 block 后,我一直觉得这两个东西很似相同,因为在绝大多数情况下,delegate 能做的事情,block 都能做,只是实现起来曾经有一段日子,是啥有 block 就用,比如像BlockKit,页面传值,回调,大致能用的地方,我都会考虑用它,就是用得多,也曾经很蛋疼地像文中作者提的那样定义:
1
typedef void(^LoginEventBlock)(LoginEvent eventType, NSData *data, NSError *err);

然后像下面这样使用:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
self.block = ^(LoginEvent eventType, NSData *data, NSError *err){
switch (eventType) {
case LoginEventBeforeLogin:
{
//to do something
break;
}
case LoginEventLogining:
{
//to do something
break;
}
case LoginEventFinished:
{
//to do something
break;
}
}
};

在没有太多if-else的情况下,没有太多case的情况下,你会觉得挺新鲜,这种方式简洁,代码是也紧凑了,所有处理都放一起了,但数量一旦超过4时,你就会觉得你整天的工作几乎都是在写if-else了,并且这样写既不方便也不好理解,你无法直观地通过签名解释这个方法干嘛的,LoginEvent是嘛东西,所以牺牲可读性去做把代码放一起是不值得的,而且我也不觉得有多方便。


注:版权声明:本文为博主原创文章,未经博主允许不得转载。