通知中心或关闭?

NotificationCenter or Closure?

For the supervisors: I have searched a lot before I decided to ask this question but I didn't find exactly what I want.

我的问题是: 使用 NotificationCenter 和使用 Closures 在两个实例之间通信哪个更好? 如果它们相似,我应该使用什么?

希望这个例子能帮助您更好地理解:-

如果我们以URLSession class为例。为什么它的大部分方法都有一个闭包?他们为什么不发送包含 Data, Response, and Error 的通知?

我知道它们之间的区别,我只是不知道它们应该在什么情况下使用。

在某些情况下,模式可以互换,但是:

  1. 对于简单的情况,使用闭包是最简单的解决方案
  2. 当两个对象之间存在复杂的通信时,使用委托很常见。一个代表可能比许多闭包更好。
  3. 当你有多个观察者或者当你不确定什么对象将被观察时,你必须使用通知。

您可能会问自己为什么我们对简单情况使用闭包而不是委托或通知。答案是闭包是最轻量级的。它们很容易创建,并且会对您的代码质量产生积极影响。

让我们考虑一个完成回调。如果您决定使用通知,则需要另一种方法来处理该通知。这同样适用于代表。如果您需要一些上下文(例如触发操作的参数),您需要将其保存到 属性.

另一方面,可以内联创建闭包。这意味着 触发操作和处理其结果的代码位于同一个地方 。这确实简化了代码的结构。还要注意,如果闭包需要一些上下文,它可以捕获它,而不需要创建额外的 属性.