开辟者大年夜赛路演 | 12月16日,技巧立异,北京不见不散
比来项目碰到的问题,因为后台返回的数据是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;
- });
- });
固然解决了,卡屏,线程壅塞的问题,然则并没有解决根本问题,数据处理照样很慢,不建议应用
因为是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:@"<" intoString:nil];
- [scanner scanUpToString:@">" intoString:&text];
- html = [html stringByReplacingOccurrencesOfString:[NSString stringWithFormat:@"%@>",text] withString:@""];
- //去除空格
推荐阅读
开辟者大年夜赛路演 | 12月16日,技巧立异,北京不见不散基于安然域安排响应的防护办法,实现纵深防御,知足云寂?娼台的安然保障请求。 应用背景跟着云计算、软件定义收集SDN等新技巧的广>>>详细阅读
本文标题:iOS数据优化之处理HTML字符串
地址:http://www.17bianji.com/lsqh/39580.html
1/2 1

网友点评
精彩导读
科技快报
品牌展示