第四章 CPU實(shí)戰(zhàn):XML解析

一、背景

主要原因是自定義的HTML"tag-soup"解析器,只是簡單的將輸入分為『標(biāo)簽』和『非標(biāo)簽』兩個(gè)類別,然后從這團(tuán)亂麻中提取元數(shù)據(jù)。

二、HTML掃描器

HTML解析器最重要的操作就是便利源文件中的每個(gè)字符,并確定他屬于標(biāo)簽還是之外的文本,將<b>粗體文本</b>這個(gè)HTML源代碼切分成開口標(biāo)簽<b>、粗體文本內(nèi)容、閉口標(biāo)簽</b>。

三、將回調(diào)映射為消息

將回調(diào)函數(shù)作為函數(shù)指針傳遞給掃描器,實(shí)際上已經(jīng)非常接近于提供消息接口了,然而這會(huì)讓接口變得非常復(fù)雜。

MPWSubData的一個(gè)微妙之處在于工作原理很像NSData,但實(shí)際上它是NSString的子類,所以兼容NSString,這僅適用于字節(jié)和字符之間具有1:1映射的字符串編碼(例如ASCII或ISOLatin1,ASCII是UTF-8的一個(gè)子集),因此解析器要檢測片段是否為純ASCII,如果是則使用MPWSubData,否則創(chuàng)建一個(gè)簡單的NSString。

MPWSubData對(duì)象使用緩沖區(qū)來進(jìn)行初始化,而該緩存區(qū)引用了一個(gè)NSData對(duì)象,以及數(shù)據(jù)中對(duì)應(yīng)區(qū)域的位置和長度,他將引用的NSData對(duì)象進(jìn)行了retain操作,因此不會(huì)釋放掉底層的緩存區(qū)。由于通常情況下,會(huì)多次使用相同的緩存區(qū),因此要正確的設(shè)置緩存區(qū),避免不必要的引用計(jì)數(shù)操作,從而達(dá)到優(yōu)化目的,否則會(huì)嚴(yán)重影響總體性能。

?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時(shí)請(qǐng)結(jié)合常識(shí)與多方信息審慎甄別。
平臺(tái)聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡書系信息發(fā)布平臺(tái),僅提供信息存儲(chǔ)服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

  • OC中的類分為可變和不可變。下表列出了Foundation框架中主要的可變類和不可變類: 種類 不可變類 可變類 ...
    陳_振閱讀 613評(píng)論 0 0
  • iOS開發(fā)系列--網(wǎng)絡(luò)開發(fā) 概覽 大部分應(yīng)用程序都或多或少會(huì)牽扯到網(wǎng)絡(luò)開發(fā),例如說新浪微博、微信等,這些應(yīng)用本身可...
    lichengjin閱讀 4,040評(píng)論 2 7
  • HTML標(biāo)簽解釋大全 一、HTML標(biāo)記 標(biāo)簽:!DOCTYPE 說明:指定了 HTML 文檔遵循的文檔類型定義(D...
    米塔塔閱讀 3,530評(píng)論 1 41
  • 站在前輩的肩膀上前行 UIKit框架和Foundation框架 所有的Mac OS X和IOS程序都是由大量的對(duì)象...
    zysmoon閱讀 8,947評(píng)論 0 16
  • 2019年4月24日 今天氣溫有點(diǎn)高,跟寶寶換了薄款包被,上午還出去曬了會(huì)太陽,寶寶很高興,瞇著眼朝我笑不一會(huì)就酣...
    ALU歲月靜好閱讀 165評(píng)論 0 1

友情鏈接更多精彩內(nèi)容