【问题标题】:Without using 3rd party libraries is URLSession necessary in order to obtain remote data?如果不使用 3rd 方库,是否需要 URLSession 才能获取远程数据?
【发布时间】:2017-01-06 21:21:21
【问题描述】:

我通常使用 AlamoFire,但一直在测试 URLSession。我尝试使用

检索数据

试试?数据(内容:URL)

并且能够正确获取数据。与此方法相比,使用 URLSession 有什么好处吗?这种方式看起来更干净,但也许我错过了一些东西。这是我正常工作的完整功能:

class UrlSessionNetworkManager: NSObject {

  static let sharedManager = UrlSessionNetworkManager()

      func parseJSONFromData(urlExtension:String)-> [String : AnyObject]?
      {

        let jsonData = try? Data(contentsOf: URL(string:"\(baseURL)\(urlExtension)")!)

        if let data = jsonData {

          do {
            let jsonDictionary = try JSONSerialization.jsonObject(with: data, options: JSONSerialization.ReadingOptions.mutableContainers) as? [String : AnyObject]

            return jsonDictionary

          } catch let error as NSError {

            print("error processing json data: \(error.localizedDescription)")
          }
        }

        return nil
      }
    }
}

【问题讨论】:

  • 注意 - 获取远程数据与对获取的数据进行操作是完全不同的讨论。所以你的问题真的与 JSON 或解析 JSON 无关。这都是关于获取远程数据的。您应该从问题中删除所有不相关的代码,并将重点放在一项相关任务上。
  • 我认为只需阅读 URLSession 的文档即可回答您的问题。它告诉你所有的好处。

标签: ios json swift nsurlsession


【解决方案1】:

几个关键点:

  • 使用 NSData 获取非本地 URL 的内容被视为不受支持的行为,并且可能随时中断。
  • 使用 NSData 获取非本地 URL 是同步发生的,这意味着有问题的线程在请求​​完成之前无法取得进展(可能持续 分钟)。
  • iOS 会杀死阻塞超过 30 秒的进程,因此如果您在主线程上使用 NSData 检索 URL,然后在慢速网络上,您的应用将被反复杀死。

所以基本上,答案是“在任何情况下都不要做你想做的事。”

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2014-02-09
    • 1970-01-01
    • 2012-11-08
    • 1970-01-01
    • 1970-01-01
    • 2021-08-07
    • 1970-01-01
    相关资源
    最近更新 更多