Ios 更新NSManagedObjectContext时CFString内存泄漏
每分钟我都会使用核心数据运行一次对sqlite数据库的更新,方法是发出web请求,解析该请求,并更新托管对象上下文中的对象。 从Web服务器返回的JSON数据存储在NSDictionary中:Ios 更新NSManagedObjectContext时CFString内存泄漏,ios,core-data,ios7,memory-leaks,instruments,Ios,Core Data,Ios7,Memory Leaks,Instruments,每分钟我都会使用核心数据运行一次对sqlite数据库的更新,方法是发出web请求,解析该请求,并更新托管对象上下文中的对象。 从Web服务器返回的JSON数据存储在NSDictionary中: NSDictionary* dictionary = [NSJSONSerialization JSONObjectWithData:operation.data options:kNilOptions error:&error]; 我使用存储为成员的字典初始化NSOperation实例。该操作
NSDictionary* dictionary = [NSJSONSerialization JSONObjectWithData:operation.data options:kNilOptions error:&error];
我使用存储为成员的字典初始化NSOperation实例。该操作在字典中循环并更新NSManagedObjectContext,例如:
for (NSDictionary *item in self.dictionary) {
NSManagedObject *newItem = [NSEntityDescription insertNewObjectForEntityForName:@"Item" inManagedObjectContext:self.context];
[newItem setValue:item[@"customerName"] forKey:@"contact_firstname"];
}
[self.context save:&error];
查看instruments面板,我发现每次更新都会留下一些未发布的CFString对象:
已发布和未发布的CFstring之间的差异可以通过每个CFstring的refcount跟踪来显示:
发布
未发布:
[NSManagedObject(\u NSInternalMethods)\u newallproperties with relationshipFaultsInAct\uuu]生成的retain(+1)阻止释放此对象。因为每次更新我都会从MSManagedObjectContext中删除所有对象,所以我看不出为什么不应该释放这些cfString
“New AllProperties With Relationship Faults InAction”的目的是什么?为什么它会保留一些我的CFString?NSManagedObjectContext
将保留对它管理的所有对象所做的所有更改,即使在调用save:
之后也是如此。这可能是这里的问题,检查在调用save:
后是否可以调用reset
reset
将简单地删除自CoreData数据库启动以来对moc
所做的所有未保存更改
[self.context save:&error];
[self.context reset];
你知道这件事的真相吗?