一、此方式要求必须在主线程中执行,否则无效。
1、是一种非阻塞的执行方式,
二、定时器:NSTimer
三、sleep方式
四、GCD方式
1、是一种非阻塞的执行方式,
2、暂时未找到取消执行的方法。
- (void)delayMethod { NSLog(@"execute"); }
1.performSelector方法
[self performSelector:@selector(delayMethod) withObject:nil afterDelay:1.0f];
具体代码:
- (void)viewDidLoad {
[super viewDidLoad];
dispatch_async(dispatch_get_main_queue(), ^{
[self performSelector:@selector(delayMethod) withObject:nil afterDelay:1];
});
;
NSLog(@"ccdvvv");
}
-(void)delayMethod{
NSLog(@"第一种延时函数");
}
运行结果: 2016-03-03 11:33:47.612 延时函数的使用[2004:92977] ccdvvv
2016-03-03 11:33:47.620 延时函数的使用[2004:92977] 第一种延时函数
我们可以看到无论怎么设置延时时间,ccdvvv总是先于delayMethod打印出来,这个跟Block方法的调用机制有关。这种方式的延时只是针对这个方法本身的函数而言的。二、定时器:NSTimer
1、此方式要求必须在主线程中执行,否则无效。
2、是一种非阻塞的执行方式,
3、可以通过NSTimer类的- (void)invalidate;取消执行。
[NSTimer scheduledTimerWithTimeInterval:1.0f target:self selector:@selector(delayMethod) userInfo:nil repeats:NO];
具体代码:
- (void)viewDidLoad {
[super viewDidLoad];
[NSTimer scheduledTimerWithTimeInterval:1 target:self selector:@selector(delayMethod) userInfo:nil repeats:NO];
NSLog(@"1");
}
-(void)delayMethod{
NSLog(@"2");
}三、sleep方式
1、此方式在主线程和子线程中均可执行。
2、是一种阻塞的执行方式,建方放到子线程中,以免卡住界面
3、没有找到取消执行的方法。
[NSThread sleepForTimeInterval:1.0f]; [self delayMethod];
具体代码:
- (void)viewDidLoad {
[super viewDidLoad];
[NSThread sleepForTimeInterval:2];
[self delayMethod];
NSLog(@"1");
}
-(void)delayMethod{
NSLog(@"2");
}四、GCD方式
1、此方式在可以在参数中选择执行的线程。
2、是一种非阻塞的执行方式,
3、没有找到取消执行的方法。
dispatch_after(dispatch_time(DISPATCH_TIME_NOW, (int64_t)(2 * NSEC_PER_SEC)), dispatch_get_main_queue(), ^{
[self delayMethod];
});
NSLog(@"1");
}
-(void)delayMethod{
NSLog(@"2");
}
本文介绍了iOS开发中实现延时执行的四种方法:performSelector、NSTimer、sleep及GCD,并对比了它们的特点,如是否阻塞、执行线程等。
1144

被折叠的 条评论
为什么被折叠?



