让session
成为已配置的NSURLSession
对象。在Swift中为此会话创建任务的典型代码是
let task = session.dataTaskWithRequest(request, completionHandler: { (data: NSData!, response: NSURLResponse!, error: NSError!) -> Void in
//my custom completion handler invocation
})
我的疑问是,我的自定义完成处理程序是否在dispatch_async
调用中被调用以避免阻塞UI线程?或者它不需要,因为API本质上是异步的,方法dataTaskWithRequest(_:completionHandler)
会处理?
同样在documentation中,该方法没有完成处理程序块,如您所见。但是我看过很多使用这种方法的教程!?
答案 0 :(得分:2)
完成处理程序在您提供的队列或其自己的串行队列上运行。除非您在创建会话AFAIK时明确传入主队列,否则回调将阻止主线程的唯一情况是,如果您的完成处理程序显式调用performSelectorOnMainThread:
或dispatch_async
/ {{1}与sync
。