performSelector可以实现延时操作,使用如下
[self performSelector:@selector(startAct) withObject:nil afterDelay:3.0];
这个延时执行的好处是还可以提前结束延时
[NSObject cancelPreviousPerformRequestsWithTarget:self selector:@selector(startAct) object:nil];
注意selector和object要前后一致
还有一个方法是可以取消所有performSelector的延时操作
[NSObject cancelPreviousPerformRequestsWithTarget:self ];
使用过程中我还发现有时候取消操作不生效,除了要注意selector和object要前后一致之外,其实还有一个要注意的点,就是延时执行和取消延时这两个操作要在同一个线程里面,一般情况下都是在主线程的,但是我有一次就刚好需要在某个网络请求完成之后取消延时,由于延时执行在主线程,网络请求在另一个异步线程里面,所以导致取消失效。要想让取消生效,则需要回到主线程执行取消操作
dispatch_async(dispatch_get_main_queue(),^{
[NSObject cancelPreviousPerformRequestsWithTarget:self selector:@selector(startAct) object:nil];
});
PS:摸鱼薅羊毛