成人免费xxxxx在线视频软件_久久精品久久久_亚洲国产精品久久久_天天色天天色_亚洲人成一区_欧美一级欧美三级在线观看

iOS數據優化之處理HTML字符串

移動開發
最近項目遇到的問題,因為后臺返回的數據是HTML字符串,所以就按照常規處理方式把HTML字符串轉換成富文本的字符串來處理,事實證明,tableview會非常卡,并且造成線程阻塞,無法響應事件

最近項目遇到的問題,因為后臺返回的數據是HTML字符串,所以就按照常規處理方式把HTML字符串轉換成富文本的字符串來處理,事實證明,tableview會非常卡,并且造成線程阻塞,無法響應事件

[[212539]]

 

  1. 在cell的model的set方法中剛開始是這樣操作的~~~~~非常卡 
  2. -(void)setModel:(XAPublicWelfareModel *)model{ 
  3. //這就是耗時操作的代碼 
  4. NSAttributedString * attrStr = [[NSAttributedString alloc]initWithData:[model.content dataUsingEncoding:NSUnicodeStringEncoding] options:@{NSDocumentTypeDocumentAttribute:NSHTMLTextDocumentType} documentAttributes:nil error:nil]; 
  5.  self.introLabel.attributedText = attrStr; 

解決方案1

首先我想到的是把耗時操作放在子線程來操作

 

  1. //1.獲取一個全局串行隊列 
  2.     dispatch_queue_t queue = dispatch_get_global_queue(DISPATCH_QUEUE_PRIORITY_DEFAULT, 0); 
  3. //2.把任務添加到隊列中執行 
  4.     dispatch_async(queue, ^{ 
  5.           
  6.         NSAttributedString * attrStr = [[NSAttributedString alloc]initWithData:[model.content dataUsingEncoding:NSUnicodeStringEncoding] options:@{NSDocumentTypeDocumentAttribute:NSHTMLTextDocumentType} documentAttributes:nil error:nil]; 
  7.           
  8.         dispatch_async(dispatch_get_main_queue(), ^{ 
  9.               
  10.             self.introLabel.attributedText = attrStr; 
  11.               
  12.         }); 
  13.           
  14.     }); 

雖然解決了,卡屏,線程阻塞的問題,但是并沒有解決根本問題,數據處理還是很慢,不建議使用

解決方案2

因為是cell展示,所以只需要展示文本信息就行,那就過濾掉HTML標簽,瞬間解決所有問題。所以在列表展示數據的時候HTML轉換NSAttributedString一定要慎用

 

  1. -(void)setModel:(XAPublicWelfareModel *)model{ 
  2. //調用去除HTML標簽的方法,直接賦值。 
  3. self.introLabel.text = [self filterHTML:model.content]; 
  4. //去除標簽的方法 
  5. -(NSString *)filterHTML:(NSString *)html 
  6.     NSScanner * scanner = [NSScanner scannerWithString:html]; 
  7.     NSString * text = nil; 
  8.     while([scanner isAtEnd]==NO
  9.     { 
  10.         [scanner scanUpToString:@"<" intoString:nil]; 
  11.         [scanner scanUpToString:@">" intoString:&text]; 
  12.         html = [html stringByReplacingOccurrencesOfString:[NSString stringWithFormat:@"%@>",text] withString:@""]; 
  13.         //去除空格   
  14.         html = [html stringByReplacingOccurrencesOfString:@" " withString:@""]; 
  15.     } 
  16.     return html; 

下面簡單介紹一下NSScanner

NSScanner是一個類,用于在字符串中掃描指定的字符,翻譯成我們需要的字符串或者數字,核心就是位置的移動 即scanLocation的移動變化

在上面的方法中首先指明了要掃描的對象 html(NSString) NSString * text 很重要 把我們要掃描出來的字符串存到text里面

而這個掃描到的字符串就是>之前的字符串 scanUpToString這個方法的意思是將scanLocation停留在>之前 并把之前的字符串傳給text。

回頭來看看我們去除html標簽的方法 整個過程都是在掃描過程中進行的NSScanner在執行scanUpToString這個方法時一旦掃描到需要的字符串比如例子中的“<”,其scanLocation就會變為html的初始位置。所以,要在執行完一次完整的掃描后 把html標簽用空字符串替換掉,在進行下一次掃描,也就是說再while中 html字符串的標簽字符會越來越少,而每次掃描的初始位置相對沒有變化都停留在上一次掃描結束的位置,即"<"標簽的前面。

責任編輯:未麗燕 來源: 你太善良_
相關推薦

2010-11-26 09:51:54

MySQL字符串

2010-08-04 11:23:15

Flex字符串

2010-07-14 16:35:52

Perl字符串處理函數

2009-08-07 15:58:54

C#字符串插入html

2013-05-02 11:13:05

C++遇到iOS應用開字符串處理

2010-06-04 14:59:06

MySQL數據庫

2010-10-09 11:54:46

MySQL字符串

2010-07-19 15:07:46

Perl字符串處理函數

2019-12-17 15:49:44

Java語言字符串

2024-01-03 08:20:05

Java字符串性能

2023-08-14 16:30:46

2009-11-17 10:55:02

PHP字符串處理函數

2009-12-15 13:15:11

Ruby字符串

2010-10-09 12:01:00

MySQL字符串

2013-12-12 17:08:24

Lua字符串

2009-12-18 09:52:40

Ruby字符串處理函數

2009-11-26 16:26:32

PHP字符串mbstr

2016-12-30 13:32:24

字符串算法代碼

2024-03-05 18:29:54

JavaString字符串

2023-10-18 07:55:41

Python字符串
點贊
收藏

51CTO技術棧公眾號

主站蜘蛛池模板: 成人毛片视频免费 | 国产精品一区二区视频 | 久久久精品视频免费 | 天堂在线中文 | 日本久久网 | 久久国产成人 | 日本一二区视频 | 中文字幕日韩欧美一区二区三区 | 国产精品不卡视频 | 视频一区中文字幕 | 91精品国产一区二区 | 国产视频一区在线观看 | 本道综合精品 | 国产精品欧美精品 | 欧美a区 | 午夜精品久久久久久久星辰影院 | 一区二区av | 精品在线播放 | 国产一二三视频在线观看 | 欧美一区在线视频 | 天天操天天射综合网 | 精品成人av| 精品在线一区二区三区 | 美女张开腿露出尿口 | 欧美一级精品片在线看 | 日韩精品在线播放 | 亚洲精品无 | 国产一区二区三区在线看 | av网站在线播放 | 中文字幕亚洲精品 | 日日夜夜精品免费视频 | 国产精品久久久久久久久免费丝袜 | 亚洲国产精品久久 | 91精品亚洲 | 亚洲欧美激情精品一区二区 | a级黄色网| 精品久 | 精精久久 | 涩爱av一区二区三区 | 午夜激情视频 | 久久99精品久久久97夜夜嗨 |