gpt4 book ai didi

ios - 枚举键和对象使用 block : can I be sure it is called on the same thread?

转载 作者:可可西里 更新时间:2023-11-01 03:30:04 28 4
gpt4 key购买 nike

最近我在使用 enumerateKeysAndObjectsUsingBlock:,今天当我的一位同事指出可以从单独的线程调用此枚举方法并且我的代码可能无法按预期工作时,我犹豫了。他甚至建议我应该使用快速枚举。问题是我真的很喜欢 enumerateKeysAndObjectsUsingBlock: 并且不喜欢快速枚举,因为它在字典方面的性质。

我的方法如下所示

- (NSArray *)someMethod
{
__block NSMutableArray *myArray = [NSMutableArray array];

[self.myDictionary enumerateKeysAndObjectsUsingBlock:^(id key, id obj, BOOL *stop) {
[myArray addObject:obj];
}

return myArray;
}

我能否确定 myArray 将始终返回预期值(假设 self.myDictionary 不为空)并且它将始终在与 someMethod 相同的线程上调用?

我知道有一个方法 enumerateKeysAndObjectsWithOptions:usingBlock: 并使用 NSEnumerationConcurrent 选项调用它会在多个线程上同时运行枚举。

但是我找不到关于enumerateKeysAndObjectsUsingBlock的任何文档。
同样指的是 enumerateObjectsUsingBlock: used on array.

最佳答案

如您所见,除非您调用 enumerateKeysAndObjectsWithOptionsNSEnumerationConcurrent选项,您可以放心,它们不会同时执行。至于 enumerateKeysAndObjects 的非并发再现是否在同一个线程上运行(尽管我打赌它确实如此),如果它不在同一个线程上运行并不重要队列,因为这是相对于您调用枚举方法的线程同步运行的。总之,您的同事对线程相关的担忧是没有根据的。

不过,我会注意到,在我的轶事测试中,这些枚举方法比快速枚举要慢。如果速度是最重要的(例如,尤其是在使用巨大的字典/数组时),那么您可能希望使用快速枚举。不过,在大多数情况下,差异并不大。

关于ios - 枚举键和对象使用 block : can I be sure it is called on the same thread?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/19283657/

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