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”