IOS中的几种比较常见的延时方法的介绍及各自优缺点

来源:互联网 发布:一键安装java环境 编辑:程序博客网 时间:2024/06/06 01:29
- (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方法的调用机制有关。这种方式的延时只是针对这个方法本身的函数而言的。

此方式要求必须在主线程中执行,否则无效。
是一种非阻塞的执行方式,
暂时未找到取消执行的方法。

2.定时器:NSTimer

[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");}运行结果:2016-03-03 11:41:12.738 延时函数的使用[2036:97927] 12016-03-03 11:41:13.742 延时函数的使用[2036:97927] 2这种方式的延时也只是针对这个方法本身的函数而言的。

此方式要求必须在主线程中执行,否则无效。
是一种非阻塞的执行方式,
可以通过NSTimer类的- (void)invalidate;取消执行。

  1. sleep方式
[NSThread sleepForTimeInterval:1.0f]; [self delayMethod];具体代码:- (void)viewDidLoad {    [super viewDidLoad];    [NSThread sleepForTimeInterval:2];    [self delayMethod];    NSLog(@"1");}-(void)delayMethod{    NSLog(@"2");}运行结果:2016-03-03 11:43:12.568 延时函数的使用[2066:99923] 22016-03-03 11:43:12.568 延时函数的使用[2066:99923] 1这个函数可以实现延时,可以延时多少时间再去执行某一个函数,也就是让程序处于类似于休眠状态,时间到了自动 去执行下面的方法。

此方式在主线程和子线程中均可执行。
是一种阻塞的执行方式,建方放到子线程中,以免卡住界面
没有找到取消执行的方法。

4.GCD方式

    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");}运行结果:2016-03-03 11:48:33.244 延时函数的使用[2098:103294] 12016-03-03 11:48:35.437 延时函数的使用[2098:103294] 2

此方式在可以在参数中选择执行的线程。
是一种非阻塞的执行方式,
没有找到取消执行的方法。

0 0
原创粉丝点击