iOS延时执行的三种方法

 1. NSTimer,可以设置一段时间执行一次,不会卡住线程

//NSTimer不准确,CADisplayLink准确 

 self.timer = [NSTimer scheduledTimerWithTimeInterval:3.0target:selfselector:@selector(roll) userInfo:nilrepeats:NO];

 //NSDefaultRunLoopMode 一旦有滚动事件,默认模式暂时不监听

//NSRunLoopCommonModes 滚动模式时监听

self.timer = [NSTimer timerWithTimeInterval:1.0 target:self selector:@selector(roll) userInfo:nil repeats:YES];

[[NSRunLoop currentRunLoop] addTimer:_timer forMode:NSRunLoopCommonModes];

//结束方法 

 [self.timer invalidate];

 

 2.GCD的方法,可以选择在子线程远行 

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

     [self roll];

});

    

dispatch_after(dispatch_time(DISPATCH_TIME_NOW, (int64_t)(3.0 * NSEC_PER_SEC)), dispatch_get_global_queue(DISPATCH_QUEUE_PRIORITY_DEFAULT, 0), ^{

     [self roll];

});

 

3.延时执行,不会卡住线程

[self performSelector:@selector(roll) withObject:nil afterDelay:3.0];

 

4.会卡住线程,不推荐使用

[NSThread sleepForTimeInterval:3.0];

郑重声明:本站内容如果来自互联网及其他传播媒体,其版权均属原媒体及文章作者所有。转载目的在于传递更多信息及用于网络分享,并不代表本站赞同其观点和对其真实性负责,也不构成任何其他建议。