iOS学习iOS初学者iOS Developer

iOS几种常见计时器

2017-06-02  本文已影响104人  上北以北

1,最常见的计时器NSTimer (默认放到defaultModel的runloop中,会受到runloop的影响)

//iOS1010以后的方法它类似,参数一:时间间隔参数二:是否一直执行

[NSTimer timerWithTimeInterval:0.1 repeats:YES block:^(NSTimer *_Nonnull timer) {

NSLog(@"nstimeing");

}];

//唯一结束NSTimer计时器方法

[timer invalidate];

2,CA计时器(不用设置时间间隔,每秒运行60次.默认放到defaultModel的runloop中,会受到runloop的影响)

//创建计时器

CADisplayLink *link = [CADisplayLink displayLinkWithTarget:selfselector:@selector(timerCall:)];

//添加到runloop中

[link addToRunLoop:[NSRunLoop mainRunLoop]forMode:NSDefaultRunLoopMode];

//调用方法

- (void)timerCall:(CADisplayLink *)link {

NSLog(@"linking");

dispatch_after(dispatch_time(DISPATCH_TIME_NOW, (int64_t)(2 *NSEC_PER_SEC)), dispatch_get_main_queue(), ^{

//结束计时器的唯一方法

[link invalidate];

});

}

3,GCD计时器,(不受runloop影响,一般用在轮播图等不需要受到runloop影响的情况下)

//GCD计时器在GCD资源里面

dispatch_source_t timer =dispatch_source_create(&_dispatch_source_type_timer, 0, 0,dispatch_get_main_queue());

//调用GCD的set方式

//参数:1,GCD计时器    2,延迟几秒后开始执行   3,计时器间隔    4,计时器精度

dispatch_source_set_timer(timer,DISPATCH_TIME_NOW,0.1*NSEC_PER_SEC, 0ull*NSEC_PER_SEC);

//handle方法(该方法在开启了计时器时调用)

dispatch_source_set_event_handler(timer, ^{

NSLog(@"GCDtimering");

});

//开启计时器

dispatch_resume(timer);

//GCD停止计时器方法,会触发dispatch_source_set_cancel_handler方法

dispatch_source_cancel(timer);

dispatch_source_set_cancel_handler(timer, ^{

//如果在非arc模式下可以在该方法里释放掉timer  (dispatch_release(timer);)

NSLog(@"计时器已经停止了");

});

上一篇下一篇

猜你喜欢

热点阅读