不使用 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."
我通常使用 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."