大家好,又见面了,我是你们的朋友全栈君。如果您正在找激活码,请点击查看最新教程,关注关注公众号 “全栈程序员社区” 获取激活教程,可能之前旧版本教程已经失效.最新Idea2022.1教程亲测有效,一键激活。
Jetbrains全系列IDE使用 1年只要46元 售后保障 童叟无欺
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
[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方式
double delayInSeconds = 1.0;
__block ViewController* bself = self;
dispatch_time_t popTime = dispatch_time(DISPATCH_TIME_NOW, (int64_t)(delayInSeconds * NSEC_PER_SEC));
dispatch_after(popTime, dispatch_get_main_queue(), ^(void){
[bself delayMethod]; });
此方式在可以在参数中选择执行的线程。
是一种非阻塞的执行方式,
没有找到取消执行的方法。
发布者:全栈程序员-用户IM,转载请注明出处:https://javaforall.cn/167856.html原文链接:https://javaforall.cn
【正版授权,激活自己账号】: Jetbrains全家桶Ide使用,1年售后保障,每天仅需1毛
【官方授权 正版激活】: 官方授权 正版激活 支持Jetbrains家族下所有IDE 使用个人JB账号...