每分钟我都会使用核心数据,通过发出web请求、解析请求和更新托管对象上下文中的对象来运行对sqlite数据库的更新。从The服务器返回的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对象:

释放的和未释放的CFStrings之间的区别可以通过以下两种方法的折算跟踪来显示:
发布

未发布:

[NSManagedObject(_NSInternalMethods) _newAllPropertiesWithRelationshipFaultsIntact__]创建的being (+1)阻止释放此对象。因为每次更新我都会从MSManagedObjectContext中删除所有对象,所以我看不出为什么不应该释放这些CFStrings。
_newAllPropertiesWithRelationshipFaultsIntact__,的目的是什么?为什么它保留了我的一些CFStrings?
发布于 2014-04-27 06:33:57
NSManagedObjectContext将保留对其管理的所有对象所做的所有更改,即使在调用save:之后也是如此。这可能是这里的问题,以检查您是否可以在调用reset之后调用save:。reset将简单地删除自moc从CoreData DB启动以来对其进行的所有未保存的更改。
[self.context save:&error];
[self.context reset];https://stackoverflow.com/questions/23320149
复制相似问题