iOS开发小贴士—iOS中延时执行的几种方法以及区别

在项目中我时常会遇到一些弹窗类提示,产品说让它突然显示太突兀了,我夸❌一个嘴巴子,“你咋那么多事”。不过我心善就勉强接受他的建议加了点动画,在此就用到下面的一些延时操作。

现阶段我共知道四种能完成上述要求的方法:

1.NSObject方法

[self performSelector:@selector(delayMethod) withObject:nil afterDelay:1.0f];

主线程中执行;
非阻塞的执行方式;
可以通过cancelPreviousPerformRequestsWithTarget取消执行。

2.定时器:NSTimer

[NSTimer scheduledTimerWithTimeInterval:1.0f target:self selector:@selector(delayMethod) userInfo:nil repeats:NO];

主线程执行;
非阻塞的执行方式;
可以通过NSTimer类的- (void)invalidate;取消执行。

3.NSThread

[NSThread sleepForTimeInterval:1.0];
[self delayMethod];

主线程和子线程均可执行;
一种阻塞的执行方式,因此建议放在子线程中执行;
暂时未有取消执行的方法。

4.GCD

double delayInSeconds = 1.0;
dispatch_time_t popTime = dispatch_time(DISPATCH_TIME_NOW, (int64_t)(delayInSeconds * NSEC_PER_SEC));
// 小提示此为延迟提交 不是延迟执行
dispatch_after(popTime, dispatch_get_main_queue(), ^{
    [self delayMethod];
});

通过参数选择在主线程或子线程中执行;
非阻塞的执行方法;
暂时未有取消执行的方法

DEMO

建议将该效果进行封装,程序员要多心疼自己,少写点是点0-0.

#pragma mark --移除活动规则View
- (void)removeRulesClick {
    
    UIButton *button = [self.view viewWithTag:2222];
    [UIView animateWithDuration:0.5 animations:^{
       
        button.alpha = 0;
        rulesView.alpha = 0;
    }];
    
    [self performSelector:@selector(removeRulesView) withObject:nil afterDelay:0.5f];
}

- (void)removeRulesView {
    
    UIButton * button = [self.view viewWithTag:2222];
    [button removeFromSuperview];
    [rulesView removeFromSuperview];
}

总结完上面,突然感觉自己子线程这块记忆有点模糊了,下一篇应该会写一点子线程方面的东西吧0_0。

你可能感兴趣的:(iOS开发小贴士—iOS中延时执行的几种方法以及区别)