不知道这里发生了什么,因为我遵循了使用它的其他答案,包括 Swift: synchronously perform code in background; queue.sync does not work as I would expect
我有一个 XMLParser,我需要加载 2 个 RSS 提要。为了防止重入解析,我需要一个接一个地加载这些 URL。问题是我需要在后台/异步中执行此操作,这样它就不会卡住 UI。
我有这个:
var myParser: XMLParser = XMLParser()
let parseQueue = DispatchQueue(label: "xmlQueue", attributes: [], target: nil)
var feeds = [RSS_FEED_URL_COT, RSS_FEED_URL] //this order
self.parseQueue.async {
for f in feeds
{
self.loadRSSData(rssFeed: f)
}
}
这确实有效,意味着没有重入错误,但整个 UI 卡住了整整 30 秒。我在这里做错了什么?
编辑:
func loadRSSData(rssFeed: String){
if let rssURL = URL(string: rssFeed) {
print("LOADING THE URL: ", rssURL)
// fetch rss content from url
if let contents = XMLParser(contentsOf: rssURL)
{
self.myParser = contents
}
// set parser delegate
self.myParser.delegate = self
self.myParser.shouldResolveExternalEntities = false
// start parsing
self.myParser.parse()
}
}
最佳答案
@Sjyguy,
请像下面这样使用 loadRSSData。
func loadRSSData(rssFeed: String){
if let rssURL = URL(string: rssFeed) {
print("LOADING THE URL: ", rssURL)
// fetch rss content from url
if let contents = XMLParser(contentsOf: rssURL)
{
self.myParser = contents
}
// set parser delegate
self.myParser.delegate = self
self.myParser.shouldResolveExternalEntities = false
**DispatchQueue.main.async{
// start parsing
self.myParser.parse()
}**
}
}
希望它有用!
关于 swift 3 : Async queue is still blocking main thread/freezing app?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/50282027/