【iOS】XML解析导致的卡顿问题
来源:互联网 发布:中国网络经济人登陆 编辑:程序博客网 时间:2024/06/06 05:25
问题描述
笔者在公司项目中,需要解析一个200K左右的XML文件(有3000个XML结点),发现解析会导致整个App卡顿。于是猜想是不是在主线程中进行了解析,导致卡顿。因此,xml的代理方法didStartElement
,即以下方法,打印了当前线程,发现代理是异步执行的,就以为不是这个问题了。
func parser(_ parser: XMLParser, didStartElement elementName: String, namespaceURI: String?, qualifiedName qName: String?, attributes attributeDict: [String : String])
但是打断点调试发现,当xml解析完毕时,整个项目就正常运行了。走审代码后,发现parse()
方法是在主线程调用的!
解决方法
开启异步线程调用parse()
OperationQueue().addOperation { parser.parse() }
PS:XMLParser是一个线程安全的类,后续代理执行的方法都会在同一个线程处理的。
卡顿猜想
虽然代理方法didStartElement
是在异步执行的,但parse()
却是在主线程调用的。因此可以猜想,parse()
调用后,会异步开启线程处理代理方法进行解析,但是主线程会继续等在解析的过程,导致了卡顿~所以parse()
也必须在异步线程开启,不然当解析的数据太大,将会导致App的卡顿。笔者项目解析220K的xml文件,需要25秒左右
阅读全文
0 0
- 【iOS】XML解析导致的卡顿问题
- IOS中pushViewController:的卡顿问题
- Eclipse修改web.xml文件引起的顿卡问题
- iOS tableView滑动卡顿的问题之一
- [iOS]调和 pop 手势导致 AVPlayer 播放卡顿
- [iOS]调和 pop 手势导致 AVPlayer 播放卡顿
- RTSP/Onvif摄像机web直播遇到的时间戳问题导致的卡顿解决方案
- win10磁盘占用100%导致经常性卡顿问题的解决!
- 关于主线程阻塞导致界面卡顿问题总结
- “系统和压缩内存”导致电脑卡顿问题
- Echarts 占用CPU高,导致浏览器卡顿问题。
- unity InputField导致安卓摄像头卡顿问题
- IOS页面跳转卡顿问题
- 小心别让圆角成了你列表的帧数杀手 --关于设置圆角导致卡顿的深层原因解析
- 解决RTMP推送时间戳问题引起HLS切片不均匀导致手机浏览器播放卡顿的问题
- 解决RTMP推送时间戳问题引起HLS切片不均匀导致手机浏览器播放卡顿的问题
- 关于android textview,edittext,导致界面的卡顿
- <当unity模型太大导致卡顿延时的解决方法>
- The content of element type "collection" must match "(constructor?,id*,result*,association*,collec
- matlab对图像操作函数的详解
- javascript开发模式
- 二维码生成类
- 标题:日期问题
- 【iOS】XML解析导致的卡顿问题
- mongodb复制集内部机制(mongodb bully算法)
- 模糊动态聚类之python实现
- Java时间工具--根据毫秒数按照时分秒格式“HH:mm:ss”显示
- 欧几里得算法
- 图像相似度算法的个人见解(python&opencv)
- HTML ionic 实现简单购物车 +-数量 选择
- 一篇关于LSTM的好博客
- Unity5.6——VideoPlayer播放