原文: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,不需要传递其他任何的信息

iOS通讯模式

相关文章: