iOS 中延时执行的四种方法及其比较

在iOS开发中,有时会用到延时执行,下面就开发中会用到的四种延时执行的方法进行简单对比,以期后续可以更好的选择合适的延时方式。

需要延时执行的方法:

- (void)delayMethod {
    NSLog(@"execute : %@", [NSDate date]);
}
阻塞式延时

阻塞式延时会阻塞当前线程,为避免卡住用户界面,建议放在子线程执行

  • NSThread
NSLog(@"start : %@", [NSDate date]);
[NSThread sleepForTimeInterval:3.f];
//[NSThread exit];

[self delayMethod];
非阻塞式延时
  • performSelector
[self performSelector:@selector(delayMethod) withObject:nil afterDelay:3];
NSLog(@"start : %@", [NSDate date]);

[NSObject cancelPreviousPerformRequestsWithTarget:self selector:@selector(delayMethod) object:nil];
  • NSTimer
NSTimer *timer = [NSTimer scheduledTimerWithTimeInterval:3 target:self selector:@selector(delayMethod) userInfo:nil repeats:NO];
NSLog(@"start : %@", [NSDate date]);

[timer invalidate];
  • dispatch_after
NSLog(@"start : %@", [NSDate date]);
dispatch_after(dispatch_time(DISPATCH_TIME_NOW, (int64_t)(3 * NSEC_PER_SEC)), dispatch_get_main_queue(), ^{
    [self delayMethod];
});

Demo : iOS 中延时执行的四种方法及其比较