Rob*_*ier 12
要拆分NSData某个分隔符,可以使用rangeOfData:options:range:,然后使用拆分来搜索分隔符subdataWithRange:.例如(根据我目前正在处理的一些代码,但我没有测试过这个特定的块):
NSRange range = [data rangeOfData:delimiter
options:0
range:NSMakeRange(0, data.length)];
if (range.location != NSNotFound) {
size_t body_offset = NSMaxRange(range);
size_t body_size = data.length - body_offset;
NSData *bodyData = [data subdataWithRange:NSMakeRange(body_offset, body_size)];
...
}
Run Code Online (Sandbox Code Playgroud)
此示例在此之后搜索delimiter并分配bodyData所有字节.您可以编写类似的代码来分解并将它们添加到数组中,或者您喜欢的任何内容.
这种方案优于滚动自己的一个优点是,您将从内部的任何优化中受益NSData,避免使用内存副本.苹果不答应这样的优化,但你可以看到他们的移动与方式dispatch_data和enumerateByteRangesUsingBlock:.事实上,你应该bytes尽可能避免(*),因为这会强制NSData创建一个连续的范围,它可能已经避免到那一点.
有关更多信息,请参阅" 二进制数据编程指南".(请注意,本指南尚未针对iOS 7进行更新,也未进行讨论enumerateByteRangesUsingBlock:.)
(*)"尽可能"在这里有点强,因为你不应该让你的代码不必要地复杂化,以避免调用bytes内存副本不会成为问题.
| 归档时间: |
|
| 查看次数: |
2350 次 |
| 最近记录: |