Block、Delegate、Notification
三种常见的回调方式
block和delegate都可以进行通知
delegate的运行成本低 block的运行成本高
block出栈需要将使用的数据从栈内存拷贝到堆内存,当然对象的话就是加计数,使用完或者block置nil后才消除。对对象的引用 甚至还有可能会拷贝对象 或者 对对象造成循环引用
delegate只是保存了一个对象指针,直接回调,没有额外消耗使用场景的区别
block更加轻型 使用起来更加方便 常在局部使用 能增加代码的可读性 和 可维护性delegate 能减少代码的耦合度,使事件的监听和事件的处理相分离。语法定义清晰,一个代理可以执行多个协议方法 而不需要创建新的代理,减少维护成本。可以同时实现多个代理
notification
也是iOS中常用的传值和回调方式
采用单例设计模式
使用起来加单,代码精简,可以实现一对多传值
缺点是:
- 必须要在使用完成后注销通知,否则有可能出现crash
- 增加调试难度很难跟踪动作进行
- 并不能获取发送通知后的反馈