2013-12-12 103 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

相关问题