iOS 延时方法,定时器。等待一段时间在执行

鸣谢:https://www.cnblogs.com/wuotto/p/9354305.html
 
概述

项目开发中经常会用到方法的延时调用,下面列举常用的几种实现方式:

1.performSelector

2.NSTimer

3.NSThread线程的sleep

4.GCD

1.performSelector

[self performSelector:@selector(delayMethod) withObject:nil/*可传任意类型参数*/ afterDelay:2.0];

 

此方法是一种非阻塞的执行方式。
取消方法:

复制代码
第一种:
/**
 *  取消延迟执行
 *
 *  @param aTarget    一般填self
 *  @param aSelector  延迟执行的方法
 *  @param anArgument 设置延迟执行时填写的参数(必须和上面performSelector方法中的参数一样)
 */
+ (void)cancelPreviousPerformRequestsWithTarget:(id)aTarget selector:(SEL)aSelector object:(nullable id)anArgument;

第二种:
//撤回全部申请延迟执行的方法
+ (void)cancelPreviousPerformRequestsWithTarget:(id)aTarget;

上面2种都是类方法,不能用实例对象去调用,只能用NSObject。
eg:
[NSObject cancelPreviousPerformRequestsWithTarget:self];
复制代码

 

2.NSTimer定时器

//这里是延时两秒钟,其中repeats是决定改延时是否无限重复
NSTimer *timer = [NSTimer scheduledTimerWithTimeInterval:2.0 target:self selector:@selector(delayMethod) userInfo:nil repeats:NO];

 

此方法是一种非阻塞的执行方式
取消执行方法:[time invalidate];

3.NSThread线程的sleep

[NSThread sleepForTimeInterval:2.0];//延时2秒

 

此方法是一种阻塞执行方式,建议放在子线程中执行,否则会卡住界面。但有时还是需要阻塞执行,如进入欢迎界面需要沉睡3秒才进入主界面时。
没有找到取消执行方式。

4.GCD

__block ViewController *weakSelf = self;
dispatch_time_t delayTime = dispatch_time(DISPATCH_TIME_NOW, (int64_t)(2.0 * NSEC_PER_SEC));

dispatch_after(delayTime, dispatch_get_main_queue(), ^{
    [weakSelf delayMethod];
});

 

此方法可以在参数中选择执行的线程,是一种非阻塞执行方式。因为该方法交给了GCD自动处理,因此不容易取消操作。

posted on   高彰  阅读(1303)  评论(0编辑  收藏  举报

编辑推荐:
· 开发者必知的日志记录最佳实践
· SQL Server 2025 AI相关能力初探
· Linux系列:如何用 C#调用 C方法造成内存泄露
· AI与.NET技术实操系列(二):开始使用ML.NET
· 记一次.NET内存居高不下排查解决与启示
阅读排行:
· Manus重磅发布:全球首款通用AI代理技术深度解析与实战指南
· 被坑几百块钱后,我竟然真的恢复了删除的微信聊天记录!
· 没有Manus邀请码?试试免邀请码的MGX或者开源的OpenManus吧
· 园子的第一款AI主题卫衣上架——"HELLO! HOW CAN I ASSIST YOU TODAY
· 【自荐】一款简洁、开源的在线白板工具 Drawnix
< 2025年3月 >
23 24 25 26 27 28 1
2 3 4 5 6 7 8
9 10 11 12 13 14 15
16 17 18 19 20 21 22
23 24 25 26 27 28 29
30 31 1 2 3 4 5

导航

统计

点击右上角即可分享
微信分享提示