各位主管:我查了很多才决定问 这个问题,但我没有找到我想要的。
我的问题是: 使用
NotificationCenter
和使用 Closures
在两个实例之间进行通信哪个更好?
如果它们相似,我应该使用什么?
希望这个例子可以帮助您更好地理解:-
如果我们以
URLSession
类为例。为什么它的大多数方法都有一个闭包?他们为什么不发送带有 Data, Response, and Error
的通知?
我知道它们之间的区别,我只是不知道在什么情况下应该使用它们。
但是,在某些情况下,这些模式是可以互换的:
您可能会问自己为什么我们在简单情况下使用闭包而不是委托或通知。答案是闭包是最轻量级的。它们很容易创建,并且会对您的代码质量产生积极影响。
让我们考虑一个完成回调。如果您决定使用通知,则需要另一种方法来处理该通知。这对代表同样有效。如果您需要一些上下文(例如触发操作的参数),您需要将其保存到属性中。
另一方面,可以内联创建闭包。这意味着触发操作并处理其结果的代码位于一处。这确实简化了代码的结构。另请注意,如果闭包需要一些上下文,它可以捕获它,而不需要创建额外的属性。
我会说:
deinit
。UIViewControllerShowDetailTargetDidChangeNotification
,您可以只在子视图控制器中监听,这使父级无需管理要通知的子级列表,如果子级发生变化,这会很棘手。UIApplicationDelegate
的类像子类那样搞乱 UIApplication
的标准行为的风险较小(例如,您忘记调用 super 或意外覆盖同名的方法)。最好每个目标实例有一个委托实例,例如不要让一个实例成为多个表视图的委托。