Ios 单例网络的并发性

Ios 单例网络的并发性,ios,objective-c,afnetworking,Ios,Objective C,Afnetworking,我已经对AFHTTPSessionManager进行了子类化,并添加了一些特定于我的实现的方法。关于将我的子类用作单例和并发性,我有几个问题: 创建单一的AFHTTPSessionManager仍然是最佳实践吗?(AF2.0,iOS7) 如果我使用[self-GET/POST方法通过子类的一个子类发出请求,这是否支持并发 操作?例如,我的同步运行缓慢,然后进行搜索。搜索是立即开始还是等待同步完成?或者,换一种方式问,这些操作是否在独立的操作队列上 你问: 创建一个单一的AFHTTPSessio

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

  • 创建单一的AFHTTPSessionManager仍然是最佳实践吗?(AF2.0,iOS7)

  • 如果我使用[self-GET/POST方法通过子类的一个子类发出请求,这是否支持并发 操作?例如,我的同步运行缓慢,然后进行搜索。搜索是立即开始还是等待同步完成?或者,换一种方式问,这些操作是否在独立的操作队列上

    • 你问:

      创建一个单一的
      AFHTTPSessionManager
      仍然是最佳实践吗?(AFNetworking 2.0,iOS7)

      我不确定这是否是最佳实践。单身经常受到嘲笑(请参阅,其中有许多反对单身的论点的链接)。这很方便,但对于大多数应用程序来说,会话管理器的单身是不必要的。我的总建议是,除非你有迫切的需要,否则不应该使用单身

      这是一个意见和争论的主题(这是明确反对堆栈溢出的),因此我不建议我们进一步探讨这个问题。按照上面的堆栈溢出问题中的链接,您将看到在那里表达的许多意见

      如果我发出请求…这是否支持并发操作

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

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

      在编写本文时,通过
      AFHTTPSessionManager
      生成的请求根本不在操作队列上运行。会话管理器
      NSURLSession
      管理任务本身

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


      但所有这些都是学术性的。我认为你真正的问题是
      GET
      POST
      请求是否异步运行,答案是“是”。如果问题是它们是否相互并发运行,答案也是“是”.

      太好了,谢谢。这就解释了为什么会有反对票。在这个具体案例中,作者在文档中推荐了单例模式:“我的总顾问是,除非你有迫切的需要,否则你不应该使用单例。”singleton AFHTTPSessionManager对象将保留请求序列化程序和响应序列化程序配置,它们不会为以后的请求进行初始化。我没有计算内存使用情况,但它们是从NSObject继承的,并且很少有重属性。这算不算?这是不重新实例化会话管理器一直存在,但这与单例不同。还有其他模式(例如依赖项注入)不涉及重新实例化,但不涉及单例问题。话虽如此,将单例用于网络管理器并不是我见过的最糟糕的模式(事实上,我甚至做过)我的观点仅仅是,许多人太快地被单身人士吸引,而没有考虑其影响和替代方案。但我认为我们不应该在这里对单身人士提起诉讼。其他地方已经详尽地介绍了这一点。