objective-c - Objective-C 中的调解器模式 : Controller objects to perform calculations etc.

标签 objective-c ios oop design-patterns

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

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

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

问题:

由于网络通信和计算是相互依赖的(即有些计算只有在接收到特定的数据包后才能开始),我想使用多线程,所以我在 View Controller 中写了很多代码.

我相信我应该按照调解器模式的想法使用协调器对象,并将我的 View Controller 从与协调相关的代码中解放出来。

您对此有何看法?

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

谢谢!

最佳答案

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

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

阅读 Apple 的 Concurrent Programming Guide 中的 NSOperations 和 block

关于objective-c - Objective-C 中的调解器模式 : Controller objects to perform calculations etc.,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11584135/

相关文章:

ios - SKCameraNode 跟不上移动节点

php - 如何在另一个函数中调用php类函数

linux - Linux 的面向对象 shell?

iphone - 转换后无法访问音频文件

ios - NStimer 不会因无效而停止

ios - 确定 UIImage 的主要颜色和次要颜色

ios - 如何禁用 iOS 中的特定方向

ios - 如何在 OpenGL es 2.0 中模拟累积缓冲区(尾随粒子效应)

java - 正则表达式验证仅适用于一个字符

ios - 如何在 Xcode 4.3.1 中使用 iOS 4.0 模拟器?