2014-01-21 62 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