成人免费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字符串

2009-08-07 15:58:54

C#字符串插入html

2010-07-14 16:35:52

Perl字符串處理函數

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字符串處理函數

2025-06-30 02:11:00

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字符串
點贊
收藏

51CTO技術棧公眾號

主站蜘蛛池模板: 午夜精品视频在线观看 | 欧美日韩国产在线观看 | 日韩亚洲视频 | 青青草精品 | 国产综合久久久久久鬼色 | 欧美激情精品久久久久久变态 | 日本色综合 | 精品在线一区 | 午夜电影一区二区 | 精品日韩一区 | 久久人爽 | 欧美一区二区视频 | 午夜影院在线观看免费 | 成人美女免费网站视频 | 亚洲大片 | 日本 欧美 国产 | 亚洲风情在线观看 | 天天操天天天干 | 欧美激情在线播放 | 国产精品我不卡 | 国产黄色av网站 | 亚洲毛片一区二区 | 国产精品亚洲成在人线 | 最新国产在线 | 亚洲精品成人 | 国产精品免费看 | 日韩视频在线观看中文字幕 | 一区二区日韩 | 久草新在线 | 日日操夜夜操天天操 | 日韩欧美三区 | 国产96在线 | 国精产品一区二区三区 | 国产小视频精品 | 亚洲精品一级 | 91在线一区 | 高清一区二区三区 | 亚洲a人| 午夜爽爽男女免费观看hd | 国产成人精品网站 | 成人毛片在线视频 |