我遇到了一个小问题,让我从代码开始
class ViewController: UIViewController { @IBOutlet weak var LBoutput: UILabel! @IBAction func BTclick(sender: AnyObject) { var url = NSURL(string: "http://google.com") println("test0") let getdata = NSURLSession.sharedSession().dataTaskWithURL(url){(data ,response , error) in var htmlContent = NSString(data: data, encoding: NSUTF8StringEncoding) println("test1") println("test2") self.LBoutput.text = "test6" } println("test3") getdata.resume() println("test4") LBoutput.text = "test5" }
这段代码给了我控制台的输出
test0 test3 test4 test1 test2
标签也将立即更新为“ test5”,但标签将更新为“ test6”大约需要30秒。
我不知道为什么要花这么长时间,有人知道吗?
在辅助线程中更新UI的常见问题:
由于URL任务是异步的,因此您的关闭显然不在主线程上运行。因此,更新闭包上的标签将必须等待主线程运行其更新循环。修复此问题的方法是包装.text =调用以使其强制在主线程上运行(无论如何,UI线程应在该线程上运行):
.text =
dispatch_async(dispatch_get_main_queue()) { self.LBoutput.text = "test6" }