【iOS笔记#9】iOS延迟执行

324 阅读1分钟

一、performSelector

  • 非阻塞
  • 主线程执行(子线程不启动runloop的话不会执行)
[self performSelector:@selector(delayMethods) withObject:nil afterDelay:1.0];
  • 执行之前可取消
[NSObject cancelPreviousPerformRequestsWithTarget:self selector:@selector(delayMethods) object:nil];

[NSObject cancelPreviousPerformRequestsWithTarget:self];

二、NSTimer

  • 非阻塞
  • 主线程执行
NSTimer *timer =  [NSTimer scheduledTimerWithTimeInterval:1.0 target:self selector:@selector(delayMethods) userInfo:nil repeats:NO];
  • 执行之前可销毁
[timer invalidate];

三、sleep

  • 阻塞
  • 不可取消

1)、objective-c

[NSThread sleepForTimeInterval:1];

2)、c

sleep(1);

四、GCD

  • 非阻塞
  • 不可取消
dispatch_after(dispatch_time(DISPATCH_TIME_NOW, (int64_t)(1 * NSEC_PER_SEC)), dispatch_get_main_queue(), ^{
	[self delayMethods];
});