第四章 CPU实战:XML解析

一、背景

主要原因是自定义的HTML"tag-soup"解析器,只是简单的将输入分为『标签』和『非标签』两个类别,然后从这团乱麻中提取元数据。

二、HTML扫描器

HTML解析器最重要的操作就是便利源文件中的每个字符,并确定他属于标签还是之外的文本,将粗体文本这个HTML源代码切分成开口标签、粗体文本内容、闭口标签

三、将回调映射为消息

将回调函数作为函数指针传递给扫描器,实际上已经非常接近于提供消息接口了,然而这会让接口变得非常复杂。

MPWSubData的一个微妙之处在于工作原理很像NSData,但实际上它是NSString的子类,所以兼容NSString,这仅适用于字节和字符之间具有1:1映射的字符串编码(例如ASCII或ISOLatin1,ASCII是UTF-8的一个子集),因此解析器要检测片段是否为纯ASCII,如果是则使用MPWSubData,否则创建一个简单的NSString。

MPWSubData对象使用缓冲区来进行初始化,而该缓存区引用了一个NSData对象,以及数据中对应区域的位置和长度,他将引用的NSData对象进行了retain操作,因此不会释放掉底层的缓存区。由于通常情况下,会多次使用相同的缓存区,因此要正确的设置缓存区,避免不必要的引用计数操作,从而达到优化目的,否则会严重影响总体性能。

你可能感兴趣的:(第四章 CPU实战:XML解析)