我需要将很多long long转换为NSString。最快的方法是什么?我知道有两种方法可以做到这一点,我想知道是否还有其他更快的东西。
NSString* str = [NSString stringWithFormat:@"%lld", val];
和
NSString* str = [[NSNumber numberWithLongLong:val] stringValue];
其中val是long long(64位int)。第一种方法解析字符串的开销很小,第二种方法有分配额外对象的开销。很可能NSNumber使用NSString的stringWithFormat,但我不确定。
有人知道更快的方法吗?
答案 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;
如果你的意思是在运行时最快,唯一可以确定的方法是尝试两种方式并查看。 个人资料。不要推测。