1.performSelector
2.NSTimer
3.sleep
4.GCD
方法一:performSelector
[self performSelector:@selector(delayMethods) withObject:nil afterDelay:1.0];
分析:该方法是一种非阻塞执行方式,不会影响其他进程;必须在主线程中执行;
可以主动取消操作:
[NSObject cancelPreviousPerformRequestsWithTarget:self selector:@selector(delayMethods) object:nil];
如果要取消当前所有延时操作:
[NSObject cancelPreviousPerformRequestsWithTarget:self];
注:该方法不够安全,这个方法在调用时会设置当前runloop中的timer。但是我们知道:只有主线程会在创建的时候默认自动运行一个runloop,并含有timer,普通的子线程是没有runloop和timer的。所以在子线程中被调用的时候,我们的代码中延时操作的代码就会一直等待timer得调度,但是实际上子线程中没有timer,这就会导致我们的延时操作代码永远都不会被执行。
方法二:NSTimer