0

我正在构建一个核心数据应用程序,需要根据对象的日期获取对象。如果这些对象的日期与用户可以更改并且可能会经常更改的全局“selectedDate”在同一天,则这些对象将显示在 UITableView 中。代码如下:

-(NSDate *)dateByMovingToEndOfDay:(NSDate *)date {

    unsigned int flags = NSYearCalendarUnit | NSMonthCalendarUnit | NSDayCalendarUnit | NSHourCalendarUnit | NSMinuteCalendarUnit | NSSecondCalendarUnit;
    NSDateComponents* parts = [[NSCalendar currentCalendar] components:flags fromDate:date];
    [parts setHour:23];
    [parts setMinute:59];
    [parts setSecond:59];
    return [[NSCalendar currentCalendar] dateFromComponents:parts];
}


-(NSDate *)dateByMovingToBeginningOfDay:(NSDate *)date {

    unsigned int flags = NSYearCalendarUnit | NSMonthCalendarUnit | NSDayCalendarUnit | NSHourCalendarUnit | NSMinuteCalendarUnit | NSSecondCalendarUnit;
    NSDateComponents* parts = [[NSCalendar currentCalendar] components:flags fromDate:date];
    [parts setHour:0];
    [parts setMinute:0];
    [parts setSecond:0];
    return [[NSCalendar currentCalendar] dateFromComponents:parts];
}

我的问题是哪种方法更有效:

每次用户更改所选日期时执行获取请求,并使用谓词仅获取日期与 selectedDate 同一天的对象

或者

在启动时获取所有托管对象,将它们存储在一个数组中,然后在每次用户更改所选日期时对数组进行排序,创建一个仅包含正确对象的新数组

4

1 回答 1

2

选项 1,按需提取。它(可能)需要更长的时间来处理,但是随着您的应用程序的增长和对象数量的增长,按需获取方法将扩展得更好,并且不会导致您的应用程序崩溃(内存不足)。

考虑使用NSFetchedResultsController并设置fetchBatchSizeNSFetchRequest

于 2013-06-04T08:43:32.680 回答