我必须下载并解析巨大的 XML 文件。下载数据发生在 NSOperation 中,一旦下载完成,它也会触发 NSXMLParser。
现在,因为我想让用户能够随时取消整个过程,所以我添加了一个取消按钮,它会停止下载并取消操作。
现在我的问题是:即使我的 NSOperation 在后台运行,当 NSXMLParser 开始解析时,UI 也会被完全阻塞。所以触摸取消按钮是没有意义的。
这怎么可能发生?由于我是从 NSOperation 内部触发解析器(完成下载后),我认为解析也应该在后台执行?!
!!!编辑!!!: 我做了一个测试。我检查了解析器运行的线程。它是主线程。这怎么可能发生?NSOperation 是在后台线程上启动的,解析器怎么会在主线程上呢?我怎样才能避免这种情况?