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 と同じ日にあるオブジェクトのみを取得する

または

起動時にすべての managedObjects を取得し、それらを配列に格納してから、ユーザーが選択した日付を変更するたびに配列を並べ替え、正しいオブジェクトのみを含む新しい配列を作成します

4

1 に答える 1