- android - RelativeLayout 背景可绘制重叠内容
- android - 如何链接 cpufeatures lib 以获取 native android 库?
- java - OnItemClickListener 不起作用,但 OnLongItemClickListener 在自定义 ListView 中起作用
- java - Android 文件转字符串
enumerateByteRangesUsingBlock:
方法在 NSData
类中,在 Apple 文档中解释如下:
Enumerate through each range of bytes in the data object using a block.
- (void)enumerateByteRangesUsingBlock:(void (^)(const void *bytes, NSRange byteRange, BOOL *stop))block
Parameters
block
The block to apply to byte ranges in the array.The block takes three arguments:
bytes
The bytes for the current range.
byteRange
The range of the current data bytes.
stop
A reference to a Boolean value. The block can set the value to YES to stop further processing of the data. The stop argument is an out-only argument. You should only ever set this Boolean to YES within the Block.讨论
枚举 block 为接收器中的每个连续内存区域调用一次(连续 NSData 对象总共调用一次),直到所有字节都已枚举,或者停止参数设置为 YES。
但我的问题是,这个 block 什么时候执行?哪个方法负责为 block 提供参数 bytes
、byteRange
和 stop
?比如我要遍历bytes数组的一部分,应该怎么控制?
最佳答案
bytes
、byteRange
和stop
参数由enumerateByteRangesUsingBlock
传递给您的 block 。您不指定要遍历哪些字节 - 您使用此方法遍历所有字节(您可以通过 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);
}
关于ios - 如何在 Objective-C 中使用 enumerateByteRangesUsingBlock?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/28122374/
enumerateByteRangesUsingBlock: 方法在 NSData 类中,在 Apple 文档中解释如下: Enumerate through each range of bytes
我是一名优秀的程序员,十分优秀!