2014-01-21 38 views
3

这是一个错误?NSMutableArray enumerateObjectsUsingBlock不同步,因为苹果说

我有这样的台词:

[myArray enumerateObjectsUsingBlock:^(id obj, NSUInteger idx, BOOL *stop) { 

    NSLog(@"%d", idx); 
}]; 

NSLog(@"end"); 

这应该打印这样

"0" 
"1" 
"2" 
... 
"end" 

但打印像

"end" 
"0" 
"1" 
"2" 
... 

苹果称enumerateObjectsWithOptions:usingBlock:是同步的,因此 “端”在枚举之前不应该打印,对吧?

你们能证实吗?

+1

您使用'enumerateObjectsWithOptions:usingBlock:'或'enumerateObjectsusingBlock:'...如果你正在使用withOptions,你指定了什么选项? – liamnichols

+0

enumerateObjectsusingBlock也是我的经验:没有命令(顺序不同,每次调用),所以我也在寻求确认。 – Unheilig

+0

@ L14M333 - 无所谓,Apple表示两者都是同步的。顺便说一句我已经尝试了两个。 – SpaceDog

回答

7

enumerateObjectsUsingBlock:绝对是同步的。我只是跑在CodeRunner同样的例子:

NSArray *myArray = @[ @1, @2, @3, @4, @5 ]; 
[myArray enumerateObjectsUsingBlock:^(id obj, NSUInteger idx, BOOL *stop) { 
    NSLog(@"%d", idx); 
}]; 

NSLog(@"end"); 

,得到了以下的输出:

0 
1 
2 
3 
4 
end 
+2

这很奇怪,因为我不是... – SpaceDog

+1

你不在枚举之前的任何位置打印'end'?你正在使用'enumerateObjectsWithOptions:usingBlock:'(在你的问题的底部提到)而不是'enumerateObjectsUsingBlock:'? –

+0

不。枚举后正在打印END。我已经尝试了两种方法。不用找了。 – SpaceDog

2

无法确认,它按预期打印:“0”,“1”,“2”,“结束”。另请注意,您正在打印索引,但日志从“1”开始。

+0

它为您打印正确吗???????????我已经修复了0,1,2部分......只是一个错字。 – SpaceDog

+0

是的,它为我打印正确。 – Peres

+0

你可以测试,因为我已经发布了上面的答案 – Sandy