将long long转换为NSString的最快方法是什么?

时间:2013-12-12 17:50:32

标签: ios objective-c nsstring

我需要将很多long long转换为NSString。最快的方法是什么?我知道有两种方法可以做到这一点,我想知道是否还有其他更快的东西。

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

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

其中val是long long(64位int)。第一种方法解析字符串的开销很小,第二种方法有分配额外对象的开销。很可能NSNumber使用NSString的stringWithFormat,但我不确定。

有人知道更快的方法吗?

2 个答案:

答案 0 :(得分:0)

我整理了一个基本的分析应用程序。我尝试了你的两种方法,以及Rob Mayoff的两种方法。

stringWithFormat:平均 0.000008 秒。其他三种方法(在stringValue上调用numberWithLongLong:)和Rob的两种方法都平均 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);
}

答案 1 :(得分:-3)

输入速度最快:

NSString *string = @(val).description;

这需要一次额外的击键:

NSString *string = @(val).stringValue;

如果你的意思是在运行时最快,唯一可以确定的方法是尝试两种方式并查看。 个人资料。不要推测。