返回

直观对比通知与block差异 助力高效理解两者区别

IOS

从概念理解通知与block

通知

通知是一种轻量级的通信机制,允许对象之间发送和接收信息。通知通常用于在对象之间传递事件信息,例如,当一个对象的状态发生变化时,它可以发送一个通知来通知其他对象。

Block

Block是一种轻量级的匿名函数,它可以像普通函数一样被调用,也可以作为参数传递给其他函数。Block通常用于在对象之间传递代码,例如,当一个对象需要执行一段代码时,它可以将这段代码封装成一个block,然后将block作为参数传递给其他函数。

从用法了解通知与block

通知

使用通知非常简单,只需要几行代码即可。首先,需要创建一个通知中心,然后将需要发送通知的对象添加到通知中心。接下来,需要创建要发送的通知,并将其发送到通知中心。最后,需要注册一个通知观察者,以便在收到通知时执行相应的操作。

Block

使用block也非常简单,只需要几行代码即可。首先,需要创建一个block,然后将其作为参数传递给另一个函数。接下来,当另一个函数执行到该block时,block中的代码就会被执行。

从优缺点剖析通知与block

通知

优点

  • 轻量级,不会对应用程序性能造成太大的影响。
  • 易于使用,只需要几行代码即可。
  • 可以实现一对多的通信,即一个对象可以同时向多个对象发送通知。

缺点

  • 耦合度高,当发送通知的对象发生变化时,需要修改所有收到通知的对象。
  • 难以调试,因为通知的发送和接收过程都是异步的。

Block

优点

  • 轻量级,不会对应用程序性能造成太大的影响。
  • 易于使用,只需要几行代码即可。
  • 可以实现一对一、一对多和多对多的通信。
  • 可以实现同步和异步通信。

缺点

  • 难以调试,因为block中的代码可能会被多次执行。
  • 容易造成内存泄漏,如果block中使用了外部变量,而没有将其置为weak,则可能会导致内存泄漏。

结合场景选择通知或block

通知

通知通常用于在对象之间传递事件信息,例如,当一个对象的状态发生变化时,它可以发送一个通知来通知其他对象。通知还可用于实现观察者模式,即一个对象可以观察另一个对象的属性或状态的变化,并在发生变化时执行相应的操作。

Block

Block通常用于在对象之间传递代码,例如,当一个对象需要执行一段代码时,它可以将这段代码封装成一个block,然后将block作为参数传递给其他函数。Block还可用于实现闭包,即一个函数可以访问其定义范围之外的变量。

在实际应用中,通知和block都可以用于实现对象之间的通信。但是,由于通知和block的特性不同,因此它们适合不同的应用场景。