# 39、用handler块降低代码分散程度

​ 笔者建议使用同一个块来处理成功与失败的情况：

* 缺点：全部逻辑写在一起会比较长和复杂
* 优点：处理成功响应的过程中可能会发现错误（更灵活）

​ 有时需要在相关时间点指向会掉操作，这种情况也可以使用`handler`块。

​ `NSNotificationCenter`就提供了一个参数，可以让调用这指定块在哪个队列里执行。默认是跟通知同一个线程：

```objectivec
- (id)addObserverForName:(NSString *)name 
                                  object:(id)object 
                   queue:(NSOperationQueue *)queue 
              usingBlock:(void(^)(NSNotification *)block
```

要点：

* 在创建对象时，可以使用内联的`handler`块将相关业务逻辑一并声明
* 在有多个实例需要监控时，如果采用委托模式，那么经常需要根据传入的对象来切换，而该用`handler`块来实现，则可直接将块与相关对象放在一起
* 设计`API`时如果用到了`handler`块，那么可以增加一个参数，使调用这可以通过此参数来决定应该把块安排在哪个队列上执行
