Есть ли лучший способ рассчитать период времени? - PullRequest
0 голосов
/ 27 июня 2011

У меня есть следующий код.Это вычисляется в cellForRowAtIndexPath, поэтому я думаю, что это может быть немного дороже.Есть ли лучший способ рассчитать период времени?

+(NSString*)toShortTimeIntervalString:(NSString*)sDate  
{ 
    NSDateFormatter* df = [[NSDateFormatter alloc]init];
    [df setDateFormat:@"yyyy-MM-dd'T'HH:mm:ssZ"];
    NSDate* date = [df dateFromString:[sDate stringByReplacingOccurrencesOfString:@"Z" withString:@"-0000"]];
    [df release];

    NSDate* today = [[NSDate alloc] init];
    NSDate *d = date; //[_twitter_dateFormatter dateFromString:sDate];
    NSTimeInterval interval = [today timeIntervalSinceDate:d];
    [today release];

    //TODO: added ABS wrapper
    double res = 0;
    NSString* result;
    if(interval > SECONDS_IN_WEEK)
    {
        res = fabs(interval / SECONDS_IN_WEEK);
        result = [NSString stringWithFormat:@"%1.0fw ago", res];
    }
    else if(interval > SECONDS_IN_DAY)
    {
        res = fabs(interval / SECONDS_IN_DAY);
        result = [NSString stringWithFormat:@"%1.0fd ago", res];
    }
    else if (interval > SECONDS_IN_HOUR){
        res = fabs(interval / SECONDS_IN_HOUR);
        result = [NSString stringWithFormat:@"%1.0fh ago", res];
    }
    else if (interval > SECONDS_IN_MIN) {
        res = fabs(interval / SECONDS_IN_MIN);
        result = [NSString stringWithFormat:@"%1.0fm ago", res];
    }
    else
    {
        interval = fabs(interval);
        result = [NSString stringWithFormat:@"%1.0fs ago", interval];
    }
    return result;
}

Ответы [ 3 ]

1 голос
/ 27 июня 2011

Это выглядит не так уж плохо, и я сомневаюсь, что из-за этого вы увидите слишком много производительности.Чтобы сделать его более эффективным, вы можете рассмотреть возможность создания только одного NSDataFormatter (сохранение его в переменной экземпляра или static переменная) и повторного его использования.Или, что еще лучше, если бы вы могли заранее преобразовать все в NSDates, вам бы не приходилось каждый раз использовать средство форматирования.Прежде чем пытаться оптимизировать, вы должны использовать инструменты, чтобы выяснить, что на самом деле занимает время.

0 голосов
/ 19 января 2013

Недавно я попал в сложное вычисление (построение графика для ряда лет), и я использовал NSDate внутри циклов.После анализа с помощью профилировщика времени NSDate, NSDateFormater, NSCalendar была первопричина.Я переключился на использование типа C ( time_t + timeinfo ), и это резко повышает скорость.

Хотя они намного быстрее, они имеют меньшую функциональность, если вам нужно работать с TimeZone и т. Д., NSDate, вероятно, легче иметь дело.

0 голосов
/ 27 июня 2011

Не совсем, но есть несколько категорий , которые инкапсулируют эту логику и делают ее вызовом из одной строки.

...