block和delegate均为常用回调方式 (暂不讨论通知)
代理
优点:
- 设置某个对象的代理,代理对象可以与被代理对象不直接相关,即使两个对象距离较远,传值也比较方便。
- 代理方法内可以方便调用对象私有方法
- delegate比block使用繁琐,对于多个小控件的回调,delegate要写更多的代码。
- delegate中一个方法处理一个逻辑,更清晰。多协议比多block更容易维护业务。
block
优点:
- 调用简介易于使用
缺点:
- block不宜多层嵌套,代码糅合在一起不易理解。
- block的实现写在持有 「持有该block的对象」的类中,无法调用远距离类的私有方法
总结:delegate 用于偏向用于业务相关的回调 , block多用于功能类的回调