前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >延迟方法_延时偏方亲测真实有效

延迟方法_延时偏方亲测真实有效

作者头像
全栈程序员站长
发布2022-09-20 09:27:09
2400
发布2022-09-20 09:27:09
举报
文章被收录于专栏:全栈程序员必看

大家好,又见面了,我是你们的朋友全栈君。

1.performSelector

– (void)performSelector:(SEL)aSelector withObject:(id)anArgument afterDelay:(NSTimeInterval)delay;

(1)aSelector:表示你要调用的方法

(2)anArgument:如果你要调用的方法中需要传递参数,那么anArgument就表示你要传递的值;如果你要调用的方法不需要传递参数,那么此处传nil

(3)delay:表示你要延迟的时间

使用此函数要注意的问题:

此函数执行时是单线程的,也就意味着你在用用这个函数时。必须等调用这个函数的方法全都执行完了以后才会执行此函数中你要调用的方法

如果你想要执行此函数的时候是多线程,那么可以用下面的方法:

– (void)performSelectorOnMainThread:(SEL)aSelector withObject:(id)arg waitUntilDone:(BOOL)wait;

具体示例如下:

– (void)viewDidLoad

{

[superviewDidLoad];

[selfperformSelectorOnMainThread:@selector(output:)withObject:@”main thread”waitUntilDone:YES];//YES表示允许多线程,如果想要单线程执行,把YES变为NO 即可

NSLog(@”what happened?”);

}

-(void)output:(NSString *)string{

NSLog(@”this string is:%@”,string);

}

打印结果如下:

延迟方法_延时偏方亲测真实有效
延迟方法_延时偏方亲测真实有效

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

2.定时器:NSTimer

代码语言:javascript
复制
[NSTimer scheduledTimerWithTimeInterval:1.0f target:self selector:@selector(delayMethod) userInfo:nil repeats:NO];

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

3. sleep方式

代码语言:javascript
复制
[NSThread sleepForTimeInterval:1.0f]; [self delayMethod];

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

4.GCD方式

代码语言:javascript
复制
double delayInSeconds = 1.0; 
代码语言:javascript
复制
 __block ViewController* bself = self; 
代码语言:javascript
复制
 dispatch_time_t popTime = dispatch_time(DISPATCH_TIME_NOW, (int64_t)(delayInSeconds * NSEC_PER_SEC));
代码语言:javascript
复制
dispatch_after(popTime, dispatch_get_main_queue(), ^(void){ 
代码语言:javascript
复制
 [bself delayMethod]; });

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

发布者:全栈程序员栈长,转载请注明出处:https://javaforall.cn/167856.html原文链接:https://javaforall.cn

本文参与 腾讯云自媒体同步曝光计划,分享自作者个人站点/博客。
如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档