2012-09-02 43 views
3

您不應該用快速枚舉來修改正在迭代的集合,但我不確定這是多大程度。下面的代碼並沒有給我帶來任何問題,但我不確定它是否幸運。有沒有人有明確的答案?使用快速枚舉來刪除NSManagedObject是否安全?

for(NSManagedObject *myObject in myArray) { 
    [myObject.managedObjectContext deleteObject:myObject]; 
} 

所以我真的不修改數組,但我刪除從上下文,這可能只是間接地修改數組的對象,但我不知道對..

回答

3

你可以對數組中的對象做任何你想要的事情,只要你不改變數組本身。

該代碼完全可以接受。

但是請注意,如果你有大量的對象刪除,你應該考慮其他的東西,以及(如預取的關係,用一個自動釋放池,確保您的MOC保持清潔等)

+0

你這是什麼意思是「確保你的MOC保持清潔」? – Snowman

+0

當您執行非常大的刪除操作時,您想要獲取對象,然後刪除它們以減少到數據庫的訪問次數。如果數量很多,您希望以較小的批次進行操作,並確保MOC釋放已刪除的對象(通過重置或使用「否」進行刷新)。一旦保存,您還需要確保所有的引用對象都不存在,因此您不會引用已刪除的對象。 –

+0

但是不會從上下文中刪除該項目,導致它從數組中丟失,並依次修改它? – Snowman