2011-06-26 149 views
0

我有以下代碼。這是在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; 
} 
+0

這對我來說看起來很好,我懷疑它太慢了。 –

+0

不要假設,測量。如果你測量它並且速度太慢,那麼找出這樣做的方法,然後詢問如何改進。如果你不知道如何測量或如何描述,那就詢問一下。 「你認爲這太慢了嗎?」並不是一個好問題。 –

+0

Josh,我測量了它,佔用了62%的時間花費了 –

回答

1

這看起來不錯,我懷疑你會看到太多的性能影響。爲了提高效率,你可以考慮只創建一個NSDataFormatter(保存在一個實例變量或static變量中)並重用它。或者甚至更好,如果您事先將所有內容轉換爲NSDates,那麼您就不必每次都使用格式化程序。

您是否確實在這裏看到任何性能問題?在嘗試和優化之前,您應該使用工具來調查實際花費的時間。

+0

時間分析器顯示,在細胞創建期間,62%的時間花費在該方法上。我應該使用不同的工具來衡量嗎? –

+0

時間分析器在這裏是正確的工具。緩存格式化的日期肯定是開始的地方;初始化新格式實際上相當昂貴。 –

0

不是真的,但也有few categories在那裏它封裝了邏輯,使之成爲一條線你的電話。

0

最近我一直在進行復雜的計算(繪製一系列年份的圖形)的情況,並且我在循環中使用了NSDate。使用時間分析器NSDate,NSDateFormater,NSCalendar進行分析是根本原因。我切換到使用C型(time_t + timeinfo),它大大提高了速度。

雖然它們速度更快,但功能更少,如果您需要處理TimeZone等,NSDate可能更容易處理。

相關問題