我正在将数千条数据插入到我的SQLite存储的Core data中。 我的ManagedObjectContext的UndoManager设置为nil。 我在for循环中插入NSManagedObject。 尝试以两种方式保存上下文,
1 循环完成后(在for循环外)保存。
for(int i =0;i<1000;i++){
MyEntity *object = [NSEntityDescription insertNewObjectForEntityForName:@"MyEntity" inManagedObjectContext:[self managedObjectContext]];
object.name = [NSString stringWithFormat:@"%d",i];
object.age = [NSNumber numberWithInt:i];
}
[self managedObjectContext] save:nil];
每次插入都需要2个(在for循环内部)。
for(int i =0;i<1000;i++){
MyEntity *object = [NSEntityDescription insertNewObjectForEntityForName:@"MyEntity" inManagedObjectContext:[self managedObjectContext]];
object.name = [NSString stringWithFormat:@"%d",i];
object.age = [NSNumber numberWithInt:i];
[self managedObjectContext] save:nil];
}
最后,我调用了Managed Context的reset方法。
[[self managedObjectContext] reset];
但问题在于完成插入操作后,为此进程所占用的内存没有得到释放。
有人能告诉我这是什么问题,或者这是预期的行为吗? 有没有避免这种内存泄漏的解决方法?
更新
我尝试了[[self managedObjectContext] refreshObject:object mergeChanges:NO];
它可以释放一部分内存,但并不能完全释放。我仍在寻找一个管理大量数据在CoreData
中的好解决方案。
如果有人能向我建议一个处理CoreData
中大量数据的示例项目(源代码),那将对我很有帮助。
谢谢。