富文本转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字符串相关推荐

  1. oracle stalestats_深入理解oracle优化器统计数据(Optimizer Statistics)

    理解oracle优化器统计数据 首先来介绍oracle数据库使用基于规则优化器(RBO)来决定如何执行一个sql语句.基于规则优化器顾名思义,它是遵循一组规则来判断一个sql语句的执行计划.这组规则是 ...

  2. ios 性能优化(一)

    逻辑优化 代码封装优化 代码执行效率优化 界面优化 离屏渲染优化 界面加载优化 逻辑优化 代码封装优化 代码的封装优化主要是细化代码的功能,每个功能单独提取出来做成一个方法,当其他地方需要用到同样功能 ...

  3. iOS性能优化之耗电量

    iOS性能优化之耗电量 前言 最近在测试App的时候,发现手机特别容易发烫,我们都知道 ,如果手机容易发烫,那么耗电量肯定会相当大,手机电量使用的时间也会相对少:对此,我在工作之余抽了点时间,对手机的 ...

  4. iOS启动速度优化实践分享

    一款App的启动速度,不单单只有用户体验这一方面,往往还决定了它能否收获更多的用户.这就好像陌生人第一次碰面,第一感觉往往决定了他们接下来是否会继续交往.由此可见,启动速度的优化必然是App开发过程中 ...

  5. iOS启动速度优化总结

    随着项目越做越大,代码和业务量越来越多,这时候每次启动APP的时候就会花费较长的时间,这对用户来说体验很不好.所以,针对APP启动时间的优化还是很有必要的. 关于APP启动时间的分析和优化可以以mai ...

  6. iOS进阶开发-iOS性能优化-关东升-专题视频课程

    iOS进阶开发-iOS性能优化-3316人已学习 课程介绍         介绍了性能优化方法,其中包括内存优化.资源文件优化.延迟加载.持久化优化.使用可重用对象和并发访问等.这些内容都是非常重要的 ...

  7. iOS性能优化系列篇之“列表流畅度优化”工具篇

    这一篇文章是iOS性能优化系列文章的的第二篇,主要内容是关于列表流畅度的优化.在具体内容的阐述过程中会结合性能优化的总体原则进行分析,所以建议大家在阅读这篇文章前先阅读一下上一篇文章:iOS性能优化系 ...

  8. iOS列表优化(转载)

    原文链接:https://blog.ibireme.com/2015/11/12/smooth_user_interfaces_for_ios/ iOS 保持界面流畅的技巧 由 ibireme | 2 ...

  9. 抖音品质建设 - iOS启动优化《实战篇》

    前言 启动是 App 给用户的第一印象,启动越慢,用户流失的概率就越高,良好的启动速度是用户体验不可缺少的一环.启动优化涉及到的知识点非常多,面也很广,一篇文章难以包含全部,所以拆分成两部分:原理和实 ...

最新文章

  1. Android短信管家视频播放器代码备份
  2. 云智慧CEO:APM技术难点在于前端数据采集与后端数据分析的结合
  3. iPhone12机型判断
  4. 火车头下载文件并发布到木翼下载系统
  5. 「Python」pandas入门教程
  6. Tyvj 1921 Freda的烦恼
  7. el-table表格格式化某一列数据;统一处理el-table表格某一列数据
  8. PHP中路径怎么用?
  9. OFD文件结构--带签名
  10. word把选择答案弄到题目里_word中把选择题的正确答案自动填到括号里技巧
  11. 收藏 | PyTorch实现各种注意力机制
  12. VC++多线程工作笔记0003---MFC中用户界面线程的相关操作
  13. ETL转换工具 kettle——spoon 安装 使用
  14. ckplayer6.8 php播放,ckplayer官方版下载-ckplayer播放器v6.8 最新版 - 极光下载站
  15. PowerDesigner书签(03)显示comment字段注释内容
  16. latex 公式编号
  17. 微表面模型Beckmann–Spizzichino distribution的概率密度函数推导
  18. coso js 魔窗
  19. matlab 实现信号的微分和积分
  20. Android AR ---HelloAR(用的EasyAR 免费版)

热门文章

  1. matlab曲线拟合的应用,MATLAB软件在曲线拟合中的应用
  2. 基于机器视觉的Data Matrix二维码识别
  3. Visual Assist X AutoText修改说明
  4. 产品研发过程管理专题——基于产品的测试管理(用友软件测试流程初探)
  5. chrome vue 未响应_vue之骨架屏踩坑之路
  6. ehd边缘直方图描述子 matlab,一种新的图像空间特征提取方法
  7. APICloud开发者进阶之路 |纯手工编写日程表功能
  8. 通过分区(Partitioning)提高Spark的运行性能
  9. android中搭建NDK环境及使用JNI技术
  10. IOS开发的一些好的建议和小技术