延时操作主要有4种方式
1.sleep方式
[NSThread sleepForTimeInterval:1.0f];
[self delayMethod];
使用sleep方式在主线程和子线程中均可执行,但是这是中阻塞线程的方式,所以建议放到子线程中使用,以免卡住主线程使界面卡住.
没有发现取消执行的方法.
2.NSTimer定时器方式
[NSTimer scheduledTimerWithTimeInterval:1.0f target:self selector:@selector(delayMethod) userInfo:nil repeats:NO];
使用定时器方式必须放到主线程中使用,否则无效. 是一种非阻塞的方式.
可以通过- (void)invalidate;方法取消执行。
3.GCD方式
dispatch_after(dispatch_time(DISPATCH_TIME_NOW, (int64_t)(0.5 * NSEC_PER_SEC)), dispatch_get_main_queue(), ^{
//write code here
});
该方式可选择线程去执行,是一种非阻塞的方式.
没有发现取消执行的方法.
4.performSelector方式
[self performSelector:@selector(delayMethod) withObject:nil afterDelay:1.0f];
使用该方式必须放到主线程中使用,否则无效. 是一种非阻塞的方式.
取消执行方法如下:
[[self class] cancelPreviousPerformRequestsWithTarget:self selector:@selector(delayMethod) object:nil];