我的应用程序执行一些关于公司估值的相当复杂的计算。 它从多个来源获取原始数据(例如,来自作为csv数据存储的Web服务和作为xml数据的基础数据的共享价格)。
获取数据后,应用程序会解析数据,将其存储在Core Data中并执行计算。计算结果也存储在核心数据中。
我目前的方法是将计算作为类别添加到公司(托管)对象,并将csv和xml数据解析为添加到数据对象的类别(图中未显示)。与网络相关的代码在单独的单例对象中(如书中所示:iOS编程:The Big Nerd Ranch Guide,第3版)。
问题:
由于网络通信和计算是相互依赖的(即某些计算只能在收到特定数据包之后才开始)并且我想使用多线程,我在视图控制器中得到了相当多的代码。
我相信我应该使用一个协调器对象,遵循中介模式的想法,并从协调相关代码中释放我的视图控制器。
您对此有何看法?
谢谢!
答案 0 :(得分:1)
iOS为此提供了两项出色的技术 - NSOperations和Grand Central Dispatch。我更习惯于将操作用于您所描述的内容,因为在操作之间创建连接非常容易,这样在某些事情完成之前就无法启动。 NSOperation队列与操作系统协同工作,以便为设备和当前资源管理线程数和一般负载。
github上有一个开源项目,“NSOperation-WebFetches-MadeEasy”,它有一个你在主类中实例化的中介对象(在本例中是你的viewController,但可以是任何类),你运行所有通过它进行操作,它会将您在mainThread上的消息发送给您班级中的一个方法。您可以在15分钟内完成此操作 - 您需要的课程是OperationsRunner,它会告诉您如何将其添加到.h文件中。您可以将此用于Web提取(并发NSOperations)和非并发操作。你现在甚至可以进行块操作。
阅读Apple的Concurrent Programming Guide
中的NSOperations和阻止