【问题标题】:NSXMLParser contentsOfURL Vs DataNSXMLParser contentsOfURL 与数据
【发布时间】:2017-04-02 01:20:19
【问题描述】:

从服务器解析 XML 文件时,我一直使用“init(data: Data)

 let url = URL(string: urlString)
 let data = NSData(contentsOf: url!)
 let parser = XMLParser(data: data as! Data)

我阅读了文档并看到了这个方法“init?(contentsOf: URL)

let url = URL(string: urlString)
let parser = XMLParser(contentsOf: url!)

问题是我是否不必要地从 URL 内容转换为数据对象,我还不如从 URL 初始化?或者,创建数据对象并从中解析有什么好处?

【问题讨论】:

    标签: swift nsxmlparser


    【解决方案1】:

    两种变体之间没有语义差异。

    对于 http(s) 网址,您应该首选 init(data:)XMLParser(data:),但您不应使用 NSData(contentsOf:) 加载数据。原因是contentsOf: 变体会用同步请求阻塞当前线程。您应该改为使用 NSURLSession 异步加载数据。

    您应该仅将XMLParser(contentsOf:)Data(contentsOf:) 用于文件 url。

    【讨论】:

    • 感谢您的解释。我在后台线程上调用整个函数,所以无论如何都不会阻塞当前线程。
    • 不,你阻塞了后台线程。后台线程也可能是您的当前线程。这不是一个好的解决方案。使用NSURLSession 和异步请求并不是很困难。异步请求由runloop执行,不会阻塞任何线程。
    猜你喜欢
    • 2013-12-01
    • 2011-11-09
    • 1970-01-01
    • 2015-12-10
    • 2016-10-19
    • 2010-10-19
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多