gpt4 book ai didi

ios - 如何在 Objective-C 中使用 enumerateByteRangesUsingBlock?

转载 作者:可可西里 更新时间:2023-11-01 05:02:18 24 4
gpt4 key购买 nike

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 提供参数 bytesbyteRangestop?比如我要遍历bytes数组的一部分,应该怎么控制?

最佳答案

bytesbyteRangestop 参数由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/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com