IOS中的几种延时方法介绍

本文介绍了iOS开发中实现延时执行的四种方法:performSelector、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");
}


评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值