普通html优化处理,iOS 数据优化之处理HTML字符串
富文本转html字符串
/**
* 富文本转html字符串
*/
+ (NSString *)attriToStrWithAttri:(NSAttributedString *)attri{
NSDictionary *tempDic = @{NSDocumentTypeDocumentAttribute:NSHTMLTextDocumentType,
NSCharacterEncodingDocumentAttribute:[NSNumber numberWithInt:NSUTF8StringEncoding]};
NSData *htmlData = [attri dataFromRange:NSMakeRange(0, attri.length)
documentAttributes:tempDic
error:nil];
return [[NSString alloc] initWithData:htmlData
encoding:NSUTF8StringEncoding];
}
字符串转富文本
/**
* 字符串转富文本
*/
+ (NSAttributedString *)strToAttriWithStr:(NSString *)htmlStr{
return [[NSAttributedString alloc] initWithData:[htmlStr dataUsingEncoding:NSUnicodeStringEncoding]
options:@{NSDocumentTypeDocumentAttribute:NSHTMLTextDocumentType}
documentAttributes:nil
error:nil];
}
最近项目遇到的问题,因为后台返回的数据是HTML字符串,所以就按照常规处理方式把HTML字符串转换成富文本的字符串来处理,事实证明,tableview会非常卡,并且造成线程阻塞,无法响应事件
在cell的model的set方法中刚开始是这样操作的~~~~~非常卡
-(void)setModel:(XAPublicWelfareModel *)model{
//这就是耗时操作的代码
NSAttributedString * attrStr = [[NSAttributedString alloc]initWithData:[model.content dataUsingEncoding:NSUnicodeStringEncoding] options:@{NSDocumentTypeDocumentAttribute:NSHTMLTextDocumentType} documentAttributes:nil error:nil];
self.introLabel.attributedText = attrStr;
}
解决方案1.首先我想到的是把耗时操作放在子线程来操作
//1.获取一个全局串行队列
dispatch_queue_t queue = dispatch_get_global_queue(DISPATCH_QUEUE_PRIORITY_DEFAULT, 0);
//2.把任务添加到队列中执行
dispatch_async(queue, ^{
NSAttributedString * attrStr = [[NSAttributedString alloc]initWithData:[model.content dataUsingEncoding:NSUnicodeStringEncoding] options:@{NSDocumentTypeDocumentAttribute:NSHTMLTextDocumentType} documentAttributes:nil error:nil];
dispatch_async(dispatch_get_main_queue(), ^{
self.introLabel.attributedText = attrStr;
});
});
虽然解决了,卡屏,线程阻塞的问题,但是并没有解决根本问题,数据处理还是很慢,不建议使用
解决方案2. 因为是cell展示,所以只需要展示文本信息就行,那就过滤掉HTML标签,瞬间解决所有问题。所以在列表展示数据的时候HTML转换NSAttributedString一定要慎用
-(void)setModel:(XAPublicWelfareModel *)model{
//调用去除HTML标签的方法,直接赋值。
self.introLabel.text = [self filterHTML:model.content];
}
//去除标签的方法
-(NSString *)filterHTML:(NSString *)html
{
NSScanner * scanner = [NSScanner scannerWithString:html];
NSString * text = nil;
while([scanner isAtEnd]==NO)
{
[scanner scanUpToString:@"
[scanner scanUpToString:@">" intoString:&text];
html = [html stringByReplacingOccurrencesOfString:[NSString stringWithFormat:@"%@>",text] withString:@""];
//去除空格
html = [html stringByReplacingOccurrencesOfString:@" " withString:@""];
}
return html;
}
下面简单介绍一下NSScanner
NSScanner是一个类,用于在字符串中扫描指定的字符,翻译成我们需要的字符串或者数字,核心就是位置的移动 即scanLocation的移动变化
在上面的方法中首先指明了要扫描的对象 html(NSString) NSString * text 很重要 把我们要扫描出来的字符串存到text里面
而这个扫描到的字符串就是>之前的字符串 scanUpToString这个方法的意思是将scanLocation停留在>之前 并把之前的字符串传给text。
回头来看看我们去除html标签的方法 整个过程都是在扫描过程中进行的NSScanner在执行scanUpToString这个方法时一旦扫描到需要的字符串比如例子中的“
普通html优化处理,iOS 数据优化之处理HTML字符串相关推荐
- oracle stalestats_深入理解oracle优化器统计数据(Optimizer Statistics)
理解oracle优化器统计数据 首先来介绍oracle数据库使用基于规则优化器(RBO)来决定如何执行一个sql语句.基于规则优化器顾名思义,它是遵循一组规则来判断一个sql语句的执行计划.这组规则是 ...
- ios 性能优化(一)
逻辑优化 代码封装优化 代码执行效率优化 界面优化 离屏渲染优化 界面加载优化 逻辑优化 代码封装优化 代码的封装优化主要是细化代码的功能,每个功能单独提取出来做成一个方法,当其他地方需要用到同样功能 ...
- iOS性能优化之耗电量
iOS性能优化之耗电量 前言 最近在测试App的时候,发现手机特别容易发烫,我们都知道 ,如果手机容易发烫,那么耗电量肯定会相当大,手机电量使用的时间也会相对少:对此,我在工作之余抽了点时间,对手机的 ...
- iOS启动速度优化实践分享
一款App的启动速度,不单单只有用户体验这一方面,往往还决定了它能否收获更多的用户.这就好像陌生人第一次碰面,第一感觉往往决定了他们接下来是否会继续交往.由此可见,启动速度的优化必然是App开发过程中 ...
- iOS启动速度优化总结
随着项目越做越大,代码和业务量越来越多,这时候每次启动APP的时候就会花费较长的时间,这对用户来说体验很不好.所以,针对APP启动时间的优化还是很有必要的. 关于APP启动时间的分析和优化可以以mai ...
- iOS进阶开发-iOS性能优化-关东升-专题视频课程
iOS进阶开发-iOS性能优化-3316人已学习 课程介绍 介绍了性能优化方法,其中包括内存优化.资源文件优化.延迟加载.持久化优化.使用可重用对象和并发访问等.这些内容都是非常重要的 ...
- iOS性能优化系列篇之“列表流畅度优化”工具篇
这一篇文章是iOS性能优化系列文章的的第二篇,主要内容是关于列表流畅度的优化.在具体内容的阐述过程中会结合性能优化的总体原则进行分析,所以建议大家在阅读这篇文章前先阅读一下上一篇文章:iOS性能优化系 ...
- iOS列表优化(转载)
原文链接:https://blog.ibireme.com/2015/11/12/smooth_user_interfaces_for_ios/ iOS 保持界面流畅的技巧 由 ibireme | 2 ...
- 抖音品质建设 - iOS启动优化《实战篇》
前言 启动是 App 给用户的第一印象,启动越慢,用户流失的概率就越高,良好的启动速度是用户体验不可缺少的一环.启动优化涉及到的知识点非常多,面也很广,一篇文章难以包含全部,所以拆分成两部分:原理和实 ...
最新文章
- Android短信管家视频播放器代码备份
- 云智慧CEO:APM技术难点在于前端数据采集与后端数据分析的结合
- iPhone12机型判断
- 火车头下载文件并发布到木翼下载系统
- 「Python」pandas入门教程
- Tyvj 1921 Freda的烦恼
- el-table表格格式化某一列数据;统一处理el-table表格某一列数据
- PHP中路径怎么用?
- OFD文件结构--带签名
- word把选择答案弄到题目里_word中把选择题的正确答案自动填到括号里技巧
- 收藏 | PyTorch实现各种注意力机制
- VC++多线程工作笔记0003---MFC中用户界面线程的相关操作
- ETL转换工具 kettle——spoon 安装 使用
- ckplayer6.8 php播放,ckplayer官方版下载-ckplayer播放器v6.8 最新版 - 极光下载站
- PowerDesigner书签(03)显示comment字段注释内容
- latex 公式编号
- 微表面模型Beckmann–Spizzichino distribution的概率密度函数推导
- coso js 魔窗
- matlab 实现信号的微分和积分
- Android AR ---HelloAR(用的EasyAR 免费版)
热门文章
- matlab曲线拟合的应用,MATLAB软件在曲线拟合中的应用
- 基于机器视觉的Data Matrix二维码识别
- Visual Assist X AutoText修改说明
- 产品研发过程管理专题——基于产品的测试管理(用友软件测试流程初探)
- chrome vue 未响应_vue之骨架屏踩坑之路
- ehd边缘直方图描述子 matlab,一种新的图像空间特征提取方法
- APICloud开发者进阶之路 |纯手工编写日程表功能
- 通过分区(Partitioning)提高Spark的运行性能
- android中搭建NDK环境及使用JNI技术
- IOS开发的一些好的建议和小技术