最近我使用enumerateKeysAndObjectsUsingBlock:
,今天我猶豫了,當我的一位同事在工作場所指出,這種枚舉方法可以從單獨的線程調用,我的代碼可能無法按預期工作。他甚至建議我應該使用快速枚舉。問題是我真的很喜歡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:
。
對於快速枚舉的「自然」,你不喜歡這麼強烈,你寧願使用這種你不確定的方法嗎? –
這個命令在這裏重要嗎?如何在這個塊中的數組中存儲東西? – Unheilig
「性質」我的意思是調用allKeys枚舉它們,然後訪問該對象,而塊枚舉你避免了。阻止 - 更方便,更簡單的代碼,也許在我的結尾寫作更少。 – sumofighter666