最近我在使用 enumerateKeysAndObjectsUsingBlock:
,但今天我的一位同事指出这个枚举方法可以从单独的线程中调用,我的代码可能无法按预期工作。他甚至建议我使用快速枚举。问题是我真的很喜欢 enumerateKeysAndObjectsUsingBlock:
,不喜欢快速枚举在处理字典时的工作方式。
我的方法如下所示:
- (NSArray *)someMethod
{
__block NSMutableArray *myArray = [NSMutableArray array];
[self.myDictionary enumerateKeysAndObjectsUsingBlock:^(id key, id obj, BOOL *stop) {
[myArray addObject:obj];
}
return myArray;
}
我可以确定如果
self.myDictionary
不为空,那么myArray
将始终返回预期的值,并且它将始终在与someMethod
相同的线程上调用吗?我知道有一个方法
enumerateKeysAndObjectsWithOptions:usingBlock:
,使用NSEnumerationConcurrent
选项调用它将同时在多个线程上运行枚举。但是我找不到任何关于
enumerateKeysAndObjectsUsingBlock
的文档。
同样适用于在数组上使用的enumerateObjectsUsingBlock:
。