原文:iOS通讯模式(KVO、Notification、Delegate、Block、Target-Action的区别)
KVO
- 适用与对某个对象的属性改变感兴趣
- recipient(接收者)需要监听sender某个属性改变的消息,并且sender会把属性改变后的值告诉你
- 比如:NSOperationQueue内部使用KVO来监听各个operation的状态改变(isFinished, isExecuting, isCancelled),因为recipient(NSOperationQueue)清楚的知道sender(NSOperation)并且控制着它们的生命周期
- 1对多
Notification
- 适用于两个不相关的对象之间广播消息,尤其是有附带信息的时候
- sender和recipient不需要知道彼此
- CoreData在managed对象的context发生改变的时候使用notification机制来通讯的(NSManagedObjectContextObjectsDidChangeNotification)
- 1对多
delegate
- 允许定制一个对象的行为并且通知它某个时候去执行
- sender需要知道recipient,注重过程
- 比如:tableView的delegate
- 1对1
Block
- 去做只有单一回调的事情,保证循环引用在某个时候会打破
- 调用代码和处理代码出现在同一个地方,注重结果
- 比如:基于block调用-[NSURLSession dataTaskWithURL:completionHandler:]
- 1对1
Target-Action
- 用于响应用户UI操作的一种模式
- recipient不需要知道sender,sender也不需要知道recipient
- 使用Target-Action模式最明显的例子是buttons,不需要传递其他任何的信息