首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >更新CFString时NSManagedObjectContext内存泄漏

更新CFString时NSManagedObjectContext内存泄漏
EN

Stack Overflow用户
提问于 2014-04-27 06:27:10
回答 1查看 442关注 0票数 0

每分钟我都会使用核心数据,通过发出web请求、解析请求和更新托管对象上下文中的对象来运行对sqlite数据库的更新。从The服务器返回的JSON数据存储在NSDictionary中:

代码语言:javascript
复制
NSDictionary* dictionary = [NSJSONSerialization JSONObjectWithData:operation.data options:kNilOptions error:&error];

我用作为成员存储的字典初始化一个NSOperation实例。操作循环遍历字典并更新NSManagedObjectContext,例如:

代码语言:javascript
复制
    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?

EN

回答 1

Stack Overflow用户

发布于 2014-04-27 06:33:57

NSManagedObjectContext将保留对其管理的所有对象所做的所有更改,即使在调用save:之后也是如此。这可能是这里的问题,以检查您是否可以在调用reset之后调用save:reset将简单地删除自moc从CoreData DB启动以来对其进行的所有未保存的更改。

代码语言:javascript
复制
[self.context save:&error];
[self.context reset];
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/23320149

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档