所以我有一个标签和一个不断增长的字符串。每次字符串添加一些东西时,我想添加一个时间戳,我的问题是这样做的最佳方法是什么。我尝试使用NSTimer,每隔0.001秒增加一次,但问题是当我的应用程序速度减慢时,保持时间也是如此,因此它不是非常准确。还有其他想法吗?继承了我试过的代码:
在视图中加载:
if (debugTimeTimer.isValid != true) {
debugTimeTimer = [NSTimer scheduledTimerWithTimeInterval:0.001 target:self selector:@selector(addTime) userInfo:nil repeats:YES];
}
addTime:
-(void) addTime {
debugMilli = debugMilli + 1;
if (debugMilli >= 1000) {
debugSec = debugSec + 1;
debugMilli = 0;
}
if (debugSec >= 60) {
debugMin = debugMin + 1;
debugSec = 0;
}
}
它添加到字符串的位置:
if (debugMin >=1) {
debugTextString = [NSString stringWithFormat:@"%i:%i:%i %@\r%@",debugMin, debugSec, debugMilli, charString, debugTextString];
} else {
debugTextString = [NSString stringWithFormat:@"%i:%i %@\r%@",debugSec, debugMilli, charString, debugTextString];
}
答案 0 :(得分:1)
此任务的最佳功能是CACurrentMediaTime
,它是QuartzCore框架的一部分。返回值是double
,表示以秒为单位的时间,精确度为亚毫秒。
如果您在应用启动时存储CACurrentMediaTime
的初始读数,则可以从后续读数中减去该初始值,以获得应用启动时的相对时间。要以毫秒为单位获得时间,请乘以1000.0
例如,如果您定义属性
@property (nonatomic) CFTimeInterval startTime;
并在viewDidLoad
self.startTime = CACurrentMediaTime();
然后您可以使用类似
的代码生成时间戳(以毫秒为单位)uint64_t timeStampInMilliseconds;
CFTimeInterval delta = CACurrentMediaTime() - self.startTime;
timeStampInMilliseconds = delta * 1000.0;
NSLog( @"%llu", timeStampInMilliseconds );
您还可以使用此代码
将时间戳分解为分钟,秒和毫秒uint64_t temp, milliseconds, seconds, minutes;
temp = timeStampInMilliseconds;
milliseconds = temp % 1000;
temp /= 1000;
seconds = temp % 60;
minutes = temp / 60;
NSLog( @"%llu:%02llu.%03llu", minutes, seconds, milliseconds );
答案 1 :(得分:0)
void printf_to_debug (char* fmt, ...) {
va_list args;
va_start( args, fmt );
vprintf(fmt, args);
charString = [[NSString alloc] initWithFormat:@(fmt) arguments:args];
va_end( args );
//time ch
static CFTimeInterval startTime = -1.0;
if ( startTime < 0.0 )
startTime = CACurrentMediaTime();
uint64_t timeStampInMilliseconds;
CFTimeInterval delta = CACurrentMediaTime() - startTime;
timeStampInMilliseconds = delta * 1000.0;
NSLog( @"%llu", timeStampInMilliseconds );
if (debugMin >=1) {
debugTextString = [NSString stringWithFormat:@"%i:%i:%i %@\r%@",debugMin, debugSec, debugMilli, charString, debugTextString];
} else {
debugTextString = [NSString stringWithFormat:@"%i:%i %@\r%@",debugSec, debugMilli, charString, debugTextString];
}
}