在实际开发中,有时会需要用到延时操作,即操作任务间隔一段时间后执行,以下提供四种方案可供参考:
方法一:
- (void)delay1{
// 延迟执行少用sleep,坏处:卡住当前线程
[NSThread sleepForTimeInterval:3];
NSLog(@"操作");
}
方法二:
- (void)delay2{
//1:GCD延时 此方式在可以在参数中选择执行的线程。是一种非阻塞的执行方式,没有找到取消执行的方法。
dispatch_after(dispatch_time(DISPATCH_TIME_NOW, (int64_t)(3 * NSEC_PER_SEC)), dispatch_get_main_queue(), ^{
NSLog(@"------task------%@", [NSThread currentThread]);
});
方法三:
- (void)delay3{
// 一旦定制好延迟任务后,不会卡主当前线程
[self performSelector:@selector(download:) withObject:nil afterDelay:3];
}
方法四:
- (void)delay4{
//NSTimer延时,此方式要求必须在主线程中执行,否则无效。是一种非阻塞的执行方式,可以通过NSTimer类的- (void)invalidate;取消执行。
[NSTimer scheduledTimerWithTimeInterval:3.0f target:self selector:@selector(delayMethod2) userInfo:nil repeats:NO];
}