block、delegate比较:
block和delegate都能实现回调传值,完成对象之间的通信和交互。
block优缺点
代码变得连贯,使用也简单,一般不需要存储临时数据,能够直接访问上下文。
block缺点:
-
block不够安全,使用 block 时稍微不注意就形成循环引用,导致对象释放不了。这种循环引用,一旦出现就比较难检查出来。
-
block效率低,block出栈需要将使用的数据从栈内存拷贝到堆内存
-
在多个通信事件的时候,block显得不够直观也不易维护。
delegate优缺点:
delegate优点:
-
delegate相对于block比较安全,因为 delegate 方法的声明和实现是分离的,不会引用上下文,也就不容易出现循环引用
-
delegate效率高一点,delegate只是保存了一个对象指针
-
在多个通信事件的时候,delegate显得直观也易维护。
delegate缺点:
-
delegate的方法的声明和实现分离,代码的连贯性不好,不易阅读。
-
很多时候需要存储一些临时数据
block和delegate使用场景:
如果对象之间只有1-2个通信事件的时候使用block,如果超过3个使用delegate