gpt4 book ai didi

iphone - CoreData:释放ManagedObject

转载 作者:行者123 更新时间:2023-12-03 18:40:50 25 4
gpt4 key购买 nike

我在iOS 4 iPhone应用程序中使用CoreData(以SQLite作为存储)来存储最初从xml文件检索的数据。我的数据模型包含15个以上的实体,我担心内存消耗,因为我看到CoreData在内存中创建了所有NSManagedObject来表示我的数据模型的对象图。
我使用基于SAX libxml2的解析器解析xml文件,并尝试将每个实体的“聚集集”逐块存储在一起,但是我想在插入该聚集体并保存托管上下文之后按顺序释放每个托管对象为下一个集群节省内存。
我看到我必须使用refreshObject:mergeChanges:来平衡每个对象通过关系与其他对象关联时所收到的多个保留​​(如数据模型中所设计的)。我在保存上下文之后执行此操作,但是接下来,当我尝试再次在存储中查找并尝试获取在其未返回任何内容之前插入的内容。
我想念什么吗?

最佳答案

如果您所做的只是导入(例如,您不需要让插入的对象显示给用户等等),则可以在保存后简单地使用[moc reset]。因此该算法将如下所示:

NSManagedObjectContext* moc = ...;
while ([xmlData hasMoreObjects]) {
// Create e.g. 500 objects and insert them into the managed object context
NSError* error = nil;
if (![moc save:&error]) {
// handle the error
}
[moc reset]; // Here the inserted objects get released in the core data stack
}


重置托管对象上下文的操作与刷新每个对象的操作相同(就像以前一样)。另外,您应该考虑使用 [[NSManagedObject alloc] initWithEntity:insertIntoManagedObjectContext:]而不是 NSEntityDescription上的便捷方法,因为您可以在不再需要它们之后立即释放它们,并且直到自动释放池被清除后它们才会保留在内存中。

看一下《 Core Data编程指南》,因为它包含围绕有效导入数据的整个部分以及有关使用Core Data进行内存管理的部分。

关于iphone - CoreData:释放ManagedObject,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3218540/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com