每分钟我都会使用核心数据运行对sqlite数据库的更新,通过发出Web请求,解析该请求以及更新托管对象上下文中的对象。 从Web服务器返回的JSON数据存储在NSDictionary:
中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];
查看“仪器”面板,我发现每次更新都会留下很少未发布的CFString对象:
已发布和未发布的CFS字符串之间的差异可以通过每个的refcount跟踪显示:
发行日期
未发行:
[NSManagedObject(_NSInternalMethods) _newAllPropertiesWithRelationshipFaultsIntact__]
所做的保留(+1)会阻止此对象被释放。由于每次更新我都会从MSManagedObjectContext中删除所有对象,因此我没有看到为什么不应该释放这些CFStrings的原因。
_newAllPropertiesWithRelationshipFaultsIntact__的目的是什么,为什么它会保留我的一些CFS字符串?
答案 0 :(得分:0)
NSManagedObjectContext
, save:
也会对其管理的所有对象进行所有更改。这可能是此问题,以确定您在致电reset
后可以致电save:
。 reset
只会删除自CoreData DB启动以来对moc
所做的所有未保存更改。
[self.context save:&error];
[self.context reset];