block优缺点
优点:
方法实现和调用可以放到一起,代码变得连贯,使用也简单,
数据访问灵活,可以直接访问上下文。
缺点:
(1)block捕捉的对象的生命周期被延长,容易产生意想之外问题或者导致循环引用。
(2)block效率低,block出栈需要将使用的数据从栈内存拷贝到堆内存
(3)每个通信事件都需要创建一个新的block,比较繁琐也不易维护。
delegate优缺点
优点:
(1)delegate相对于block比较安全,因为 delegate 方法的声明和实现是分离的,不会引用上下文,也就不容易出现循环引用
(2)delegate效率高一点,delegate只是保存了一个对象指针
(3)一个delegate可以包含多个通知事件,事件可以根据协议分类实现接口隔离
缺点:
delegate的方法的声明和实现分离,代码的连贯性不好,不易阅读。
适用场景
如果对象之间只有1-2个通信事件的时候使用block。
如果超过3个建议使用delegate。