当前位置: 代码迷 >> Iphone >> 在子线程中使用runloop,准确操作NSTimer计时的注意点 三种可选方法
  详细解决方案

在子线程中使用runloop,准确操作NSTimer计时的注意点 三种可选方法

热度:164   发布时间:2016-04-25 05:28:36.0
在子线程中使用runloop,正确操作NSTimer计时的注意点 三种可选方法
1、第一种方法
+ (NSTimer *)scheduledTimerWithTimeInterval:(NSTimeInterval)ti target:(id)aTarget selector:(SEL)aSelector userInfo:(id)userInfo repeats:(BOOL)yesOrNo;
2、第二种方法
NSThread *thread = [[NSThread alloc] initWithTarget:self selector:@selector(newThread) object:nil];

[thread start];
 - (void)newThread{     @autoreleasepool     {         [NSTimer scheduledTimerWithTimeInterval:2.0 target:self selector:@selector(addTime) userInfo:nil repeats:YES];         [[NSRunLoop currentRunLoop] run];     } }
3、第三种方法
使用了GCD
dispatch_source_t _timers;
     uint64_t interval = 0.01 * NSEC_PER_SEC;     dispatch_queue_t queue = dispatch_queue_create("my queue", 0);     _timers = dispatch_source_create(DISPATCH_SOURCE_TYPE_TIMER, 0, 0, queue);     dispatch_source_set_timer(_timers, dispatch_time(DISPATCH_TIME_NOW, 0), interval, 0);     __weak ViewController *blockSelf = self;     dispatch_source_set_event_handler(_timers, ^()     {         NSLog(@"Timer %@", [NSThread currentThread]);         [blockSelf addTime];     });     dispatch_resume(_timers);
然后再主线程刷新
dispatch_async(dispatch_get_main_queue(), ^{
self.label.text = [NSString stringWithFormat:@"%.2f", self.timeCount/100];
});
(以上内容摘自http://www.faceye.net/search/120004.html)

切记:千万不要开一个线程,并在其中执行死循环,这时候就得考虑RunLoop机制。