iphone - NSNotification 与委托(delegate)协议(protocol)?

标签 iphone asynchronous nsnotifications nsnotificationcenter

我有一个 iPhone 应用程序,它基本上是从 API 获取信息(以 XML 形式,但最终可能是 JSON 形式)。结果对象通常显示在 View Controller 中(主要是表格)。

这是现在的架构。

我有 NSOperation 类,可以从远程服务器获取不同的对象。这些 NSOperation 类中的每一个都将采用一个自定义委托(delegate)方法,该方法将在解析结果对象时触发它们,最后在没有更多结果可用时触发一个方法。因此,代表的协议(protocol)将类似于:

(void) ObjectTypeResult:(ObjectType *)result;
(void) ObjectTypeNoMoreResults;

我认为该解决方案效果很好,但我最终得到了一堆委托(delegate)协议(protocol),然后我的 View Controller 必须实现所有这些委托(delegate)方法。我不认为它有那么糟糕,但我一直在寻找更好的设计。

所以,我正在考虑使用 NSNotifications 来删除委托(delegate)的使用。我可以将该对象包含在通知的 userInfo 部分中,然后仅发布收到的对象,然后在没有更多对象可用时发布最终事件。然后,即使在一个 Controller 中使用多个对象,我也可以在每个 View Controller 中使用一种方法来接收所有数据。†

那么,有人可以与我分享每种方法的优点/缺点吗?我是否应该考虑重构我的代码以使用事件而不是委托(delegate)?在某些情况下,一个比另一个更好吗?在我的场景中,我真的不想在多个地方接收通知,所以也许基于协议(protocol)的委托(delegate)是可行的方法。

谢谢!

最佳答案

事实上,你的设计听起来不错。明确的 Cocoa 方法是使用委托(delegate),并且比到处扔对象更受欢迎。此外,以这种方式定义协议(protocol)使您的代码非常明确且易于理解。总而言之:继续努力

关于iphone - NSNotification 与委托(delegate)协议(protocol)?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2435148/

相关文章:

iphone - 从后台注册本地通知

iphone - 忽略文件 [路径] 文件中缺少所需的架构 i386

Java异步servlet : Wait for a specific event

iphone - NSNotificationCenter 与委派(使用协议(protocol))?

ios - SnapChat 用户发布和检索

iphone - iOS/Xcode 4 : View won't load

http - 微服务异步操作 HTTP 响应

javascript - MySQL 查询未按顺序执行 (NodeJS)

iphone - 如何通过 NSNotification 将消息从一个类传递到另一个类

ios - 当用户在 iOS 上打开应用程序切换器时监听事件