我列举了日常经常使用的四种方法,各有优劣。不足之处,望大家斧正。
1.performSelector方法
[self performSelector:@selector(delayTime) withObject:nil afterDelay:2.0f/*延时的时间 为两秒*/];
-(void)delayTime
{
NSLog(@"延时的响应方法");
}
这种方法是一种非阻塞的执行方式,暂未找到取消执行方法。
在主线程中执行。
2.NSTimer 方法
[NSTimer timerWithTimeInterval:2.0f target:self selector:@selector(delayTime) userInfo:nil repeats:NO];
这是一种非阻塞的执行方式,可以采用NStimer类的-(void)invalidate;方法取消执行。
在主线程中执行。
NSTimer *timer;
[timer invalidate];
3.sleep方式
[NSThread sleepForTimeInterval:2.0f];
[self delayTime];
此方式在主线程和子线程中均可执行。
是一种阻塞的执行方式,建议放到子线程中,以免出现界面的滑动不畅(卡顿)。
没有找到取消执行的方法。
4.GCD的方式
__block ViewController *weakSelf=self;
dispatch_time_t delayTime = dispatch_time(DISPATCH_TIME_NOW, (int64_t)(3.0/** 延时的事件*/ * NSEC_PER_SEC));
dispatch_after(delayTime, dispatch_get_main_queue(), ^{
[weakSelf delayTime];
});
是一种非阻塞的执行方式,没有找到取消执行的方法。
此方式在可以在参数中选择执行的线程。