2013-12-12 139 views
-1

我需要將很多長轉換轉換爲NSString。什麼是最快的方法來做到這一點?我知道有兩種方法可以做到這一點,我想知道是否還有其他更快的方法。什麼是將長長轉換爲NSString的最快方法

NSString* str = [NSString stringWithFormat:@"%lld", val]; 

而且

NSString* str = [[NSNumber numberWithLongLong:val] stringValue]; 

其中val是長長(64位INT)。第一種方法具有解析字符串的小開銷,第二種方法具有分配額外對象的開銷。很可能NSNumber使用NSString的stringWithFormat,但我不確定。

有沒有人知道更快的方法呢?

+2

有多快與方法1去的速度有多快,你試圖得到? – CaptJak

+4

我不認爲差異值得擔心。 –

+0

您是否需要立即擁有所有的字符串,或者您是否可以重複使用可變字符串?你確定這條線是性能問題嗎? –

回答

0

我整理了一個基本的分析應用程序。我嘗試了你的兩種方法,Rob Mayoff的兩種方法。

stringWithFormat:取平均值爲0.000008秒。其他三種方法(呼叫stringValuenumberWithLongLong:)和羅布的兩個,均平均分別爲0.000011秒。

這是我的代碼。這顯然不是100%準確的,因爲有包括配置文件中的一些其他的操作,但差異將在所有測試的一樣:

- (void) startProfiling { 
    self.startDate = [NSDate date]; 
} 

- (NSTimeInterval) endProfiling { 
    NSDate *endDate = [NSDate date]; 
    NSTimeInterval time = [endDate timeIntervalSinceDate:self.startDate]; 
    self.startDate = nil; 
    NSLog(@"seconds: %f", time); 
    return time; 
} 

- (void)doTest:(id)sender { 
    long long val = 1234567890987654321; 

    NSTimeInterval totalTime = 0; 

    for (int i = 0; i < 1000; i++) { 
     [self startProfiling]; 

     // change this line for each test 
     NSString* str = [NSString stringWithFormat:@"%lld", val]; 

     totalTime += [self endProfiling]; 
    } 

    NSLog(@"average time: %f", totalTime/1000); 
} 
-3

這是最快的打字:

NSString *string = @(val).description; 

這需要一個額外的按鍵:

NSString *string = @(val).stringValue; 

如果你指的是最快的在運行時,可以肯定的唯一方法是嘗試一下兩種方式和看看。 個人資料。不要推測。

+5

你不應該使用'description'作爲非調試目的。 –

+1

您能否指出我所說的Apple文檔?因爲我在'debugDescription'的文檔中看到了這一點,但在'description'的文檔中沒有看到。 –

+0

@HotLicks雖然我同意你的觀點,但我保證你有一個例外 - 'NSString'。 – rmaddy

相關問題