在遍历我的核心数据对象时遇到内存问题。随着循环,CFData(存储)不断增加,直到应用程序崩溃。每个循环完成后,核心数据是否不应该释放内存?

for (Patient *patient in self.fetchedResultsController.fetchedObjects) {
    for (Exam *examForPatient in patient.exams) {
        //do stuff with examForPatient
    }
}

编辑-尝试了以下操作,但仍具有相同的方式:
for (Patient *patient in self.fetchedResultsController.fetchedObjects) {
    for (Exam *examForPatient in patient.exams) {
        NSLog(@"%@", [examForPatient.examDate description]);

        [self.fetchedResultsController.managedObjectContext refreshObject:examForPatient mergeChanges:NO];
    }
    [self.fetchedResultsController.managedObjectContext refreshObject:patient mergeChanges:NO];
}

最佳答案

当您不再需要某个项目驻留在内存中时,可以刷新它。
从文档:
“如果要遍历很多对象,则可能需要使用本地自动释放池块来确保尽快释放临时对象”

编辑:参见@lnafziger答案

注意:如果要更新患者对象或检查对象,则无法刷新它,因为它将丢失对其的所有更改(如果使用mergeChanges:YES,则不会释放其内存)。然后,您将需要定期保存并刷新不再需要的对象。

See here了解更多信息。

10-08 03:22