不使用 3rd 方库是否需要 URLSession 才能获取远程数据?

Without using 3rd party libraries is URLSession necessary in order to obtain remote data?

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

检索数据

try? Data(contentsOf: 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
      }
    }
}

几个关键点:

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

所以基本上,答案是 "Do not under any circumstances do what you're thinking about doing."