以前使用iOS有两种类型的请求:sendSynchronousRequest和sendAsynchronousRequest。但是,两者都在iOS9中被弃用。两种情况的推荐替代品:1和2完全相同:
[[NSURLSession sharedSession] dataTaskWithRequest:request
completionHandler:^(NSData *data,
NSURLResponse *response,
NSError *error) {
//A piece of code after response completes.
}] resume];
那么,在最近的iOS中,这两者之间是否存在差异?为什么做出这样的决定?
答案 0 :(得分:1)
作为一项规则,当Apple审核/升级API时,它们会淘汰可能阻塞线程并仅引入异步再现的同步方法。并且,在可能的情况下,这些新的异步方法通常也是可取消的。这两种NSURLConnection
便利方法值得退休。
虽然我不记得Apple明确阐述了这一策略,但可以从许多框架(NSURLSession
,Contacts框架,Photos框架等)中看到的进化逻辑推断出这一点。我确定他们之所以这样做是因为同步API很容易被误用,几乎会招致糟糕的编程模式(特别是阻塞主线程)。