今天看到一道很有意思的面试题,想了半天也不得其解,想上来问问大家。怎么实现一个精准的Timer?我写了如下的代码进行测试。1.在主线程中。NSTimer*tiemer=[NSTimerscheduledTimerWithTimeInterval:1.0target:selfselector:@selector(output)userInfo:nilrepeats:YES];-(void)output{NSLog(@"-------------");}发现间隔时间大概在正负5毫秒之间徘徊。就像这样:2013-05-0216:25:32.550TestDemoArc[21139:907]-------------2013-05-0216:25:33.549TestDemoArc[21139:907]-------------2013-05-0216:25:34.554TestDemoArc[21139:907]-------------2013-05-0216:25:35.555TestDemoArc[21139:907]-------------如果在主线程中做一些操作,比如:intj=0;for(inti=0;i<100000000;i++){j=j+i;}时间间隔会变为两秒。就像这样:2013-05-0216:38:32.437TestDemoArc[21207:907]-------------2013-05-0216:38:34.437TestDemoArc[21207:907]-------------2013-05-0216:38:36.437TestDemoArc[21207:907]-------------2013-05-0216:38:38.439TestDemoArc[21207:907]-------------2013-05-0216:38:40.437TestDemoArc[21207:907]-------------当然,用block放到子线程里就只有1毫秒左右的偏差了。现在想问怎么做一个Timer,保证有在1毫秒以下的偏差。
波斯汪
aluckdog
相关分类