Swift 3:异步队列仍在阻止主线程/冻结应用程序?

Swift 3:异步队列仍在阻止主线程/冻结应用程序?,swift,asynchronous,swift3,xml-parsing,grand-central-dispatch,Swift,Asynchronous,Swift3,Xml Parsing,Grand Central Dispatch,我不知道这里发生了什么,因为我遵循了其他使用这个的答案,包括 我有一个XMLParser,需要加载2个RSS提要。为了防止重入解析,我需要一个接一个地加载这些URL。问题是我需要在后台/异步中执行此操作,这样就不会冻结UI 我有这个: var myParser: XMLParser = XMLParser() let parseQueue = DispatchQueue(label: "xmlQueue", attributes: [], target: nil) var feeds = [RS

我不知道这里发生了什么,因为我遵循了其他使用这个的答案,包括

我有一个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秒。我做错了什么

编辑:

@Sjyguy

请使用如下所示的装载机数据

func loadRSSData(rssFeed:String){


希望它能起作用!

没有看到
loadRSSData
没有人能告诉你这个问题。@r请看我的编辑似乎没问题。在调试器中运行你的代码。在30秒“冻结”期间,单击调试器中的“暂停”按钮,查看主队列上是否发生任何事情。您是否尝试将队列的
QOS
设置为
background
?您的代码没有显示它。请尝试将队列初始化更新为
DispatchQueue(标签:“xmlQueue”,QOS:.background,属性:[],autoreleaseFrequency:.inherit,target:nil)
DispatchQueue.global(qos:.background)
@Malik-tryed无效
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()
        }

    }
    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()
        }** 
    }
}