3

我的应用程序获取当前设备位置,将其发布到我的服务器,并返回要在表格视图中显示的字典。目前我正在使用 CLLocationManager 委托方法和 AFJSONRequestOperation(AFNetworking 的检索数据通过-NSURLConnection-in-NSOperation 类)来完成这项工作,但这个功能在一个视图控制器方法中,我希望能够重用这个跨其他视图控制器。

我计划创建自己的 NSOperation 子类,但首先我想知道在另一个 NSOperation 内部启动 NSOperations (AFJSONRequestOperation) 是否有任何看不见的陷阱。这是否按预期工作,或者我应该找到一种方法来创建一个在操作之间具有依赖关系的队列?

4

2 回答 2

2

在 NSOperation 中安排 NSULRL 连接操作将失败,除非您将其安排在主运行循环中。AFJSONOperation(或 AFURLOperation 的任何子类)将成功,因为在幕后,AFNetworking 操作被安排在它们自己的 NSOperationQueue 和自定义运行循环上。

所以 - 是的。去吧。我使用 NSOperation 子类来隔离我的所有工作进程。它比在您的 VC 或模型中间平放 GCD 要干净得多。

警告 - 由于所有 AFNetworking 操作都是基于块的并且异步返回,因此您的 NSOperation 子类将需要是并发的。Apple 在他们的Concurrent NSOperation Subclasses文档中提供了如何构建这个的详细描述

(可选)您可以跳过构建并发 NSOperation 子类,并从您的 NSOperation 中同步触发您的网络操作,因为您已经离开了主队列。

于 2013-08-26T23:21:41.523 回答
0

所有 NSOperation 的东西都在后台使用 GCD,而且 GCD 没有嵌套 dispatch_async 调用的问题,所以我怀疑嵌套 NSOperation 只要你的逻辑是正确的就会给你带来问题。

于 2013-08-26T22:38:32.163 回答