You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

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

附上当时的线程状态截图:
线程状态截图1
线程状态截图2

内容的提问来源于stack exchange,提问作者blue

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.27 07:06:49