htr*_*eaf 4 objective-c nsdata ios
该方法enumerateByteRangesUsingBlock:在课堂上NSData,并在Apple文档中解释如下:
使用块枚举数据对象中的每个字节范围.
- (void)enumerateByteRangesUsingBlock:(void (^)(const void *bytes, NSRange byteRange, BOOL *stop))block参数
block
要应用于数组中字节范围的块.该块有三个参数:
bytes
当前范围的字节.
byteRange
当前数据字节的范围.
stop
对布尔值的引用.该块可以将值设置为YES以停止进一步处理数据.stop参数是一个out-only参数.您应该只在块中将此布尔值设置为YES.讨论
枚举块被调用一次用于接收器中的每个连续内存区域(对于连续的NSData对象一次),直到枚举所有字节或者将stop参数设置为YES.
但我的问题是,块何时执行?哪个方法负责提供参数bytes,byteRange以及stop块?例如,如果我想遍历一部分字节数组,我该怎么做才能控制?
的bytes,byteRange和stop参数传递给你块通过enumerateByteRangesUsingBlock.您没有指定要遍历的字节 - 您使用此方法遍历所有字节(您可以通过早期终止stop).
举个简单的例子,假设您想搜索一些NSData寻找0xff的内容.你可以使用 -
NSInteger ffFound=NSNotFound;
[myData enumerateByteRangesUsingBlock:^(const void *bytes, NSRange byteRange, BOOL *stop) {
for (NSInteger i=0;i<byteRange.length;i++) {
if (bytes[i]== 0xff) {
ffFound=byteRange.location+i;
*stop=YES;
break;
}
}
}];
if (ffFound != NSNotFound) {
NSLog(@"0xFF was found at location %ld",(long)ffFound);
}
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
2424 次 |
| 最近记录: |