Apple说,NSMutableArray enumerateObjectsUsingBlock不是同步的

这是一个错误吗?

我有这样的话:

[myArray enumerateObjectsUsingBlock:^(id obj, NSUInteger idx, BOOL *stop) { NSLog(@"%d", idx); }]; NSLog(@"end"); 

这应该像这样打印

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

但是印刷就像

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

Apple说enumerateObjectsWithOptions:usingBlock:是同步的,所以在枚举之前不应该打印“end”,对吧?

你能证实一下吗?

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 

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