2011-06-26 9 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

測定しないでください。あなたがそれを測定し、それが遅すぎる場合は、そのようにしていることを理解し、それを改善する方法を尋ねます。測定方法やプロファイル方法がわからない場合は、その点について尋ねてください。 "これは遅すぎると思いますか?"本当に良いSOの質問ではありません。 –

+0

ジョシュ、私はそれを測定し、それは費やす時間の62%を費やします –

答えて

1

これはあまりにも悪くはありませんし、あなたはそれからあまりにも多くのパフォーマンスヒットを見ているとは思わない。より効率的にするには、1つのNSDataFormatter(インスタンス変数またはstatic変数に保存)を1つだけ作成し、それを再利用することが考えられます。あるいは、NSDatesにすべてを変換することができれば、毎回フォーマッタを使用する必要はありません。

ここで実際にパフォーマンスの問題が発生していますか?試して最適化する前に、実際に何が起きているのかを調査するためにInstrumentsを使用する必要があります。

+0

タイムプロファイラは、セルの作成中にそのメソッドに費やされた時間の62%を示します。私は測定するために別の楽器を使用すべきですか? –

+0

タイムプロファイラが最適なツールです。フォーマットされた日付をキャッシュすることは間違いなく正しい場所です。新しいフォーマットを初期化するのは、実際にはかなり高価です。 –

0

はないが、そのロジックをカプセル化し、それあなたのための1つのラインコール作りそこfew categoriesがあります。

0

最近、私は複雑な計算(一連の年のグラフをプロットする)をしていて、NSDateをループ内で使用していました。時間プロファイラNSDate、NSDateFormaterで分析した後、NSCalendarが根本原因でした。私はCタイプ(time_t + timeinfo)を使用するように切り替えて、速度を大幅に向上させました。

これははるかに高速ですが、機能が少ないため、TimeZoneなどを処理する必要がある場合、NSDateはおそらく扱いが簡単です。

関連する問題