最新下载
热门教程
- 1
- 2
- 3
- 4
- 5
- 6
- 7
- 8
- 9
- 10
iOS中延时执行的几种方式比较及汇总
时间:2022-06-26 05:48:49 编辑:袖梨 来源:一聚教程网
在开发过程中,我们有时会希望把一些操作封装起来延迟一段时间后再执行。本文列举了四种延时执行某函数的方法及其一些区别。假如延时1秒时间执行下面的方法。
- (void)delayMethod { NSLog(@"execute"); }
1.performSelector方法
这是iOS中常用的一种延迟执行方法.
//不带参数 [self performSelector:@selector(delayDo:) withObject:nil afterDelay:1.0f]; //带参数 [self performSelector:@selector(delayDo:) withObject:@"abc" afterDelay:1.0f];
此方式要求必须在主线程中执行,否则无效。
是一种非阻塞的执行方式,
暂时未找到取消执行的方法。
2.定时器:NSTimer
采用计时器的延迟方法
[NSTimer scheduledTimerWithTimeInterval:1.0f target:self selector:@selector(delayMethod) userInfo:nil repeats:NO];
此方式要求必须在主线程中执行,否则无效。
是一种非阻塞的执行方式,
可以通过NSTimer类的- (void)invalidate;取消执行。
3. sleep方式
[NSThread sleepForTimeInterval:1.0f]; [self delayMethod];
此方式在主线程和子线程中均可执行。
是一种阻塞的执行方式,建方放到子线程中,以免卡住界面
没有找到取消执行的方法。
最好不要在主线程中使用,否则会卡住界面.
4.GCD方式
//在主线程延迟执行 dispatch_after(dispatch_time(DISPATCH_TIME_NOW, (int64_t)(3 * NSEC_PER_SEC)), dispatch_get_main_queue(), ^{ [self delayDo:@"GCD"]; }); //在子线程延迟执行 dispatch_after(dispatch_time(DISPATCH_TIME_NOW, (int64_t)(5 * NSEC_PER_SEC)), dispatch_get_global_queue(DISPATCH_QUEUE_PRIORITY_DEFAULT, 0), ^{ [self delayDo:@"Global-GCD"]; });
此方式在可以在参数中选择执行的线程。
是一种非阻塞的执行方式,
没有找到取消执行的方法。
相关文章
- 塞尔达传说王国之泪卡米诸纳神庙怎么过 04-18
- 心之钢宝箱玩法指南 04-18
- 梦道兑换码及兑换方式 04-18
- 女神异闻录夜幕魅影喜多川祐介用什么武器 04-18
- 原神4.6版本5星UP武器分析 04-18
- 《塞尔达传说王国之泪》时光之勇者套装升级素材指南 04-18