3

我的应用程序执行了一些关于公司估值的相当复杂的计算。它从多个来源获取原始数据(例如,来自存储为 csv 数据和基本数据存储为 xml 数据的 Web 服务的股价)。

获取数据后,应用程序解析数据,将其存储在 Core Data 中并执行计算。计算结果也存储在核心数据中。

我目前的方法是将计算作为类别添加到公司(托管)对象中,并将 csv 和 xml 数据作为类别添加到数据对象中(图中未显示)。与网络相关的代码位于单独的单例对象中(如书中建议的那样:iOS Programming: The Big Nerd Ranch Guide, 3rd Edition)。

问题:

由于网络通信和计算是相互依赖的(即某些计算只有在接收到特定的数据包后才能开始),并且我想使用多线程,我最终在视图控制器中编写了相当多的代码。

我相信我应该按照中介者模式的想法使用一个协调器对象,并将我的视图控制器从协调相关的代码中解放出来。

您对此有何看法?

  • 在您看来,调解器模式(协调器对象)是正确的方法吗?
  • 您建议如何设置协调器对象?
  • 网络上或书中是否有关于此主题的任何好的教程或示例?

谢谢!

4

1 回答 1

1

iOS 为此提供了两项伟大的技术——NSOperations 和 Grand Central Dispatch。对于您所描述的内容,我更喜欢使用操作,因为在操作之间创建连接真的很容易,这样在其他事情完成之前,某些事情不会开始。NSOperation 队列与操作系统协同工作,以便为设备和当前资源管理线程数和一般负载。

github上有一个开源项目“NSOperation-WebFetches-MadeEasy”,它有一个中介对象,您可以在主类中实例化(在本例中是您的viewController,但可以是任何类),您可以通过它运行所有操作,并且它会在 mainThread 上向您发送回您类中的一个方法的消息。您可以在 15 分钟内开始使用 - 您想要的课程是 OperationsRunner,它会告诉您如何将其添加到 .h 文件中。您可以将它用于 Web 提取(并发 NSOperations)和非并发操作。您现在甚至可以进行块操作。

在 Apple 的并发编程指南中阅读 NSOperations 和 blocks

于 2012-07-20T17:52:19.047 回答