我必须下载并解析巨大的XML文件。下载数据发生在NSOperation中,一旦下载完成,该NSOperation也将触发NSXMLParser。

现在,由于我想让用户可以随时取消整个过程,因此我添加了一个取消按钮,该按钮可以停止下载并取消操作。

现在我的问题是:即使我的NSOperation在后台运行,当NSXMLParser开始解析时,UI也会被完全阻塞。因此,触摸“取消”按钮毫无意义。

怎么会这样由于我从NSOperation内部触发了解析器(完成下载后),因此我认为解析也应该在后台执行?

!!!编辑!!! :我做了一个测试。我检查了解析器运行的线程。它是主线程。怎么会这样NSOperation在后台线程上启动,解析器如何在主线程上?我该如何避免呢?

最佳答案

解决了。问题在于,NSURLConnection显然在主线程上调用其委托,从而导致在主线程上也执行以下每个方法调用。

因此,我只需要再次明确地将我的方法调用带入后台。

关于ios - NSOperation内的NSXMLParser,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/16436706/

10-12 12:43