【问题标题】:Is it safe to delete an NSManagedObject using fast enumeration?使用快速枚举删除 NSManagedObject 是否安全?
【发布时间】:2012-09-02 21:00:02
【问题描述】:

您不应该通过快速枚举来修改正在迭代的集合,但我不确定那是什么程度。下面的代码没有给我带来任何问题,但我不确定是不是我很幸运。有人有明确的答案吗?

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

所以我并没有真正修改数组,而是从上下文中删除对象,这可能只是间接修改数组,但我不确定..

【问题讨论】:

    标签: ios core-data fast-enumeration


    【解决方案1】:

    你可以对数组中的对象做任何你想做的事情,只要你不改变数组本身。

    该代码完全可以接受。

    但是请注意,如果您有很多对象要删除,您还应该考虑其他事情(例如预取关系、使用自动释放池、确保 MOC 保持清洁等)

    【讨论】:

    • “确保您的 MOC 保持清洁”是什么意思?
    • 当您进行非常大的删除时,您希望获取对象,然后删除它们以减少访问数据库的次数。如果它很多,您希望以较小的批次进行,并确保 MOC 释放已删除的对象(通过重置或不刷新)。保存后,您还需要确保所有引用对象都已消失,这样您就不会引用已删除的对象。
    • 但是从上下文中删除项目不会导致它从数组中丢失,进而修改它吗?
    • 该对象在 MOC 中被删除,直到您保存才提交。无论哪种情况,您拥有的数组仍然具有其所有对象。 MOC中的对象可能会被删除,保存后也可能会被完全删除,但数组本身并没有改变。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2019-11-13
    • 1970-01-01
    • 2015-12-10
    • 2012-08-12
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多