2014-01-11 209 views
1

是enumerateUsingBlock:線程安全嗎?我的意思是,我可以在使用enumerateUsingBlock枚舉另一個線程的同時枚舉NSMutableArray嗎?是enumerateUsingBlock:線程安全嗎?

enumerateObjectsWithOptions:usingBlock如何使用NSEnumerationConcurrent選項?

+1

線程安全規則#1:如果你必須問,它不是線程安全的。 – matt

回答

5

編號NSMutableArray從來沒有內在線程安全。所有枚舉都假定該集合保持不變,包括NSEnumerationConcurrent。如果在枚舉期間修改集合,即使是在同一個線程中,也會引發異常。

+0

謝謝。我當時就是這麼想的。我只是因爲可以同時枚舉項目而感到困惑。 – Mirek

+0

你會注意到所有的枚舉方法都是在不可變的超類上定義的。有很多情況下,你會枚舉一個數組(串行或併發),而不是修改它。突變你正在列舉的數組充其量只是一個微妙的命題,IME通常構成「糟糕的代碼味道」。 – ipmcc