Swift 3:异步队列仍阻塞主线程,应用冻结如何解决?
问题:后台顺序解析RSS Feed却导致UI冻结
我最近在做一个用XMLParser加载两个RSS Feed的功能,要求必须按顺序解析避免重入问题,同时得在后台异步执行,不能让UI卡住。参考相关方案实现后,代码确实解决了重入错误,但UI却会冻结长达30秒,实在搞不懂哪里出问题了,来请教大家!
我编写的主逻辑代码如下:
var myParser: XMLParser = XMLParser() let parseQueue = DispatchQueue(label: "xmlQueue", attributes: [], target: nil) var feeds = [RSS_FEED_URL_COT, RSS_FEED_URL] // 按这个顺序解析 self.parseQueue.async { for f in feeds { self.loadRSSData(rssFeed: f) } }
补充的loadRSSData函数代码:
func loadRSSData(rssFeed: String){ if let rssURL = URL(string: rssFeed) { print("LOADING THE URL: ", rssURL) // 从URL获取RSS内容 if let contents = XMLParser(contentsOf: rssURL) { self.myParser = contents } // 设置解析器代理 self.myParser.delegate = self self.myParser.shouldResolveExternalEntities = false // 开始解析 self.myParser.parse() } }
附上当时的线程状态截图:

内容的提问来源于stack exchange,提问作者blue
相关产品推荐
相关产品推荐

