Core Data 和 NSSortDescriptor - 内存基础

Posted

技术标签:

【中文标题】Core Data 和 NSSortDescriptor - 内存基础【英文标题】:Core Data and NSSortDescriptor - memory basics 【发布时间】:2014-04-14 10:05:26 【问题描述】:

我正在尝试对核心数据实体的关系进行排序。例如有一个员工对象,它有部门关系。

    我对员工执行 NSFetchRequest 我写了一个方法来取出departments (NSSet),它可以让我对部门进行分类

我使用的代码如下。

[tempArray sortedArrayUsingDescriptors:[NSArray arrayWithObject:sortDescriptor]];

我看到内存在一段时间后仍被保留,并且其中的核心数据对象在很长一段时间后仍被保留。

我认为这可能是原因删除了这条线

//[moc setRetainsRegisteredObjects:YES];

但这无济于事。我想了解 Core Data 对象的 NSSet 上的所有对象方法是否会导致内存增加以及 sortedArrayUsingDescriptors 进行深度复制? 我知道这是一个浅拷贝,请确认,即使在使用 sortedArrayUsingDescriptors 获得的对象数组后,内存仍然保留的逻辑原因是什么。

【问题讨论】:

首先你应该明确你的问题。此外,您应该以正确的方式对其进行格式化。那么,您是否使用ARC?最后,您在哪里看到这么大的内存占用? 【参考方案1】:

正如我在评论中所述,您应该为您的问题提供一些背景信息。那么,您在 Instrument 中看到过这种行为吗?

无论如何,您可以根据特定谓词(如果我很好地理解您的问题,谓词将为您提供属于特定员工的部门)。这样排序是在 SQL 级别完成的。

您还应该提供您正在使用的相关代码

[tempArray sortedArrayUsingDescriptors:[NSArray arrayWithObject:sortDescriptor]];

sortDescriptor 呢?如果你没有使用 ARC,你 alloc-init 一个新的 sortDescriptor 你必须释放它。否则会漏水。

【讨论】:

以上是关于Core Data 和 NSSortDescriptor - 内存基础的主要内容,如果未能解决你的问题,请参考以下文章

在同一个数据库上同时使用 core-data 和基于 sqlite c 的 api

RestKit / Core Data:远程删除的实体不会从 Core Data 中删除

System.Data.Entity.Core.EntityCommandExecutionException 和内部异常 SqlException:无效的列名“xxxx”

保存 Core Data 数组和字典

Core Data 和 iCloud 出错

持久化和重新排列 Core Data 记录的顺序