NSAttributedString NSHTMLTextDocumentType 主线程卡死问题

使用NSAttributedString初始化 html 文本时(NSHTMLTextDocumentType)会导致主线程卡死。这应该是苹果的解析 html 文本的一个 bug。

NSAttributedString.init(data:(string?.data(using:.unicode))!,options: [NSDocumentTypeDocumentAttribute: NSHTMLTextDocumentType], documentAttributes: nil)

按照苹果文档的说法,上述代码不可以运行在后台线程(background thread),其次,它会出现 time out 超时,运行在主线程会造成线程卡死。

所以最正确做法应该是通过 global queue进行初始化,然后将结果丢回主线程刷新 ui。

DispatchQueue.global().async {
    let text = try? NSAttributedString(data: contentToDisplay.data(using: .unicode)!,
                            options: [NSDocumentTypeDocumentAttribute:NSHTMLTextDocumentType], documentAttributes:nil)
    DispatchQueue.main.async {
        strongSelf.contentLabel.attributedText = text
    }
}

ios - NSAttributedString initWithData and NSHTMLTextDocumentType crash if not on main thread - Stack Overflow

©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容

  • Swift1> Swift和OC的区别1.1> Swift没有地址/指针的概念1.2> 泛型1.3> 类型严谨 对...
    cosWriter阅读 13,794评论 1 32
  • 线程 操作系统线程理论 线程概念的引入背景 进程 之前我们已经了解了操作系统中进程的概念,程序并不能单独运行,只有...
    go以恒阅读 5,596评论 0 6
  • 最全的iOS面试题及答案 iOS面试小贴士 ———————————————回答好下面的足够了-----------...
    zweic阅读 7,597评论 0 73
  • Java多线程学习 [-] 一扩展javalangThread类 二实现javalangRunnable接口 三T...
    影驰阅读 8,060评论 1 18
  • 史上最全的iOS面试题及答案 iOS面试小贴士———————————————回答好下面的足够了----------...
    Style_伟阅读 7,087评论 0 35