[英]Why private queue dispatch _async update UI after main queue update UI?
[英]UI becomes non responding after getting from in to the main queue
我試圖從url延遲加載圖像並在僅在主隊列中接收到圖像時更新UI,UI得到更新,但視圖變得無響應,我正在使用GCD創建一個新線程來獲取網址中的數據
讓imageUrl:NSURL = NSURL(string:SiteAPIURL +(DEFAULTS.valueForKey(kInviterImageUrl)as!String))!
let request: NSURLRequest = NSURLRequest(URL: imageUrl)
SwiftLoader.show(title: "Loading", animated: true)
let queue : dispatch_queue_t = dispatch_get_global_queue(DISPATCH_QUEUE_PRIORITY_HIGH, 0)
dispatch_async(queue) { () -> Void in
let data : NSData = NSData(contentsOfURL: imageUrl)!
let image = UIImage(data: data)!
dispatch_async(dispatch_get_main_queue(), { () -> Void in
self.userImage.image = image
self.userImageWide.image = image
})
}
}
“ DISPATCH_QUEUE_PRIORITY_HIGH:調度到隊列的項目以高優先級運行;該隊列計划在任何默認優先級或低優先級隊列之前執行。” 多數民眾贊成從文檔,所以使用其他優先級較低的東西,因為這可能會阻止默認隊列,例如QOS_CLASS_USER_INITIATED。 這就是你想要的
if let url = imageUrl{
let qos = Int(QOS_CLASS_USER_INITIATED.rawValue)
dispatch_async(dispatch_get_global_queue(qos, 0), {
let data = NSData(contentsOfURL: imageUrl)
dispatch_async(dispatch_get_main_queue(), {
if data != nil {
if let image = UIImage(data: data){
self.userImage.image = image
self.image = UIImage(data: imageData!)
self.userImageWide.image = image
}
}
})
})
}
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.