AFNetworking Singleton的并发性

时间:2014-05-23 19:48:33

标签: ios objective-c afnetworking

我已经将AFHTTPSessionManager子类化,并添加了一些特定于我的实现的方法。关于使用我的子类作为单例和并发,我有几个问题:

  • 创建AFHTTPSessionManager的单例仍然是最佳做法吗? (AFNetworking 2.0,iOS7)

  • 如果我使用[self GET / POST方法通过子类的单例进行请求,那么这支持并发 操作?例如,我有一个慢同步运行,然后进行搜索。搜索会立即开始还是等待同步完成?或者,换句话说,这些操作是在独立的操作队列上进行的吗?

1 个答案:

答案 0 :(得分:6)

你问:

  

创建单AFHTTPSessionManager仍是最佳做法吗? (AFNetworking 2.0,iOS7)

我不确定这是不是最好的做法。单身人士经常受到嘲笑(见What's wrong with singleton?,其中有很多反对单身人士的论据)。它们很方便,但对于大多数应用程序来说,会话​​管理器的单例是不必要的。我的总法律顾问是,除非你有一些迫切的需要,否则你不应该使用单身人士。

这是一个意见和辩论的主题(在Stack Overflow上明确不赞成),所以我不建议我们进一步追求这个问题。按照上面Stack Overflow问题中的链接,您会看到很多意见。

  

如果我提出请求......这是否支持并发操作?

是的,网络请求以异步方式运行并支持并发操作。

  

这些操作是否在独立的操作队列中?

在我写这篇文章时,通过AFHTTPSessionManager生成的请求根本不会在操作队列上运行。会话的经理NSURLSession自行管理任务。

另一方面,基于NSURLConnection的{​​{1}}将在单个并发操作队列上运行AFHTTPRequestOperationManagerGET个请求。如果您手动创建自己的POST,可以根据需要将它们添加到自己的队列中。

但所有这些都是学术性的。我认为你真正的问题是AFHTTPRequestOperationGET请求是否异步运行,答案是肯定的。如果问题是它们是否同时相互运行,那么答案就是“是”。