核心数据和NSSortDescriptor - 内存基础

时间:2014-04-14 10:05:26

标签: ios objective-c core-data nsfetchrequest nssortdescriptor

我试图对Core Data实体的关系进行排序。例如,有一个雇员对象,它有部门关系。

  1. 我做了员工的NSFetchRequest
  2. 我写了一个方法来取出departmentsNSSet),它让我分类了部门
  3. 我使用的代码如下。

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

    我发现即使在一段时间后内存也会被保留,并且核心数据对象也会在很长一段时间后保留。

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

    //[moc setRetainsRegisteredObjects:YES];

    但这没有帮助。我想了解核心数据对象的NSSet上的所有对象方法是否会导致内存崩溃并且sortedArrayUsingDescriptors执行深层复制? 我知道它是一个浅层副本,请确认,即使在使用sortedArrayUsingDescriptors使用对象数组后,内存仍然保留的逻辑原因。

1 个答案:

答案 0 :(得分:0)

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

无论如何,您可以根据特定的谓词(而不是NSFetchRequest对基于特定谓词的setSortDescriptors:进行提取并同时进行排序(而不是Department),而不是提取然后排序。很好地理解你的问题,谓词将为你提供属于特定员工的部门。这样,排序就在SQL级别完成。

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

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

sortDescriptor怎么样?如果您不使用ARC,则alloc-initsortDescriptor您必须将其取消。否则你会有泄漏。