Block、Delegate、Notification

三种常见的回调方式

block和delegate都可以进行通知

  1. delegate的运行成本低 block的运行成本高
    block出栈需要将使用的数据从栈内存拷贝到堆内存,当然对象的话就是加计数,使用完或者block置nil后才消除。对对象的引用 甚至还有可能会拷贝对象 或者 对对象造成循环引用
    delegate只是保存了一个对象指针,直接回调,没有额外消耗

  2. 使用场景的区别
    block更加轻型 使用起来更加方便 常在局部使用 能增加代码的可读性 和 可维护性

    delegate 能减少代码的耦合度,使事件的监听和事件的处理相分离。语法定义清晰,一个代理可以执行多个协议方法 而不需要创建新的代理,减少维护成本。可以同时实现多个代理

notification

也是iOS中常用的传值和回调方式

采用单例设计模式
使用起来加单,代码精简,可以实现一对多传值

缺点是:

  • 必须要在使用完成后注销通知,否则有可能出现crash
  • 增加调试难度很难跟踪动作进行
  • 并不能获取发送通知后的反馈