进入主队列后 UI 变得无响应
Posted
技术标签:
【中文标题】进入主队列后 UI 变得无响应【英文标题】:UI becomes non responding after getting from in to the main queue 【发布时间】:2015-10-05 19:37:54 【问题描述】:我正在尝试从 url 延迟加载图像并在仅在主队列中接收到图像后更新 UI,UI 正在更新但视图变得无响应,我正在使用 GCD 创建一个新的从 URL 获取数据的线程
让 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
)
【问题讨论】:
【参考方案1】:“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
)
)
【讨论】:
以上是关于进入主队列后 UI 变得无响应的主要内容,如果未能解决你的问题,请参考以下文章