时间:2021-05-19
近日学习了延迟执行的几种方法,分享一下。
1.performSelector(NSObject)方法
2.NSTimer方法
3.GCD方法
4.sleep(NSThread)方法
延迟执行代码:
- (void)delayDo : (id)sender { NSLog(@"do:%@",sender);}1.performSelector(NSObject)方法
这是iOS中常用的一种延迟执行方法.
特点:这个方法必须要在主线程中使用.可以传递参数.可以取消操作,不能暂停.
//不带参数[self performSelector:@selector(delayDo:) withObject:nil afterDelay:1.0f];//带参数[self performSelector:@selector(delayDo:) withObject:@"abc" afterDelay:1.0f];取消操作分为2种:
(1)取消所有延迟执行操作
[NSObject cancelPreviousPerformRequestsWithTarget:self];
(2)取消指定的延迟执行操作
当你取消指定的延迟操作时,操作的唯一标示是传递的参数,只有传递了正确的参数才能取消操
2.NSTimer方法
采用计时器的延迟方法
特点:这个方法必须要在主线程中使用.可以传递参数.可以取消操作,可以暂停,可以立即执行延迟操作
因为这个方法可以暂停,这里设置了一个变量isRun来判断是否在运行.
//计时器对象NSTimer * timer; //作为计时器判断状态的变量BOOL isRun;开始计时,repeats:NO.只执行一次. YES,循环重复执行.
复制代码 代码如下:isRun = YES;
timer = [NSTimer scheduledTimerWithTimeInterval:1.0f target:self selector:@selector(delayDo:) userInfo:@"abc" repeats:YES];
暂停操作:
if (isRun) {#warning 此方法是暂停的功能 其实是把时间拉远了 isRun = NO; [timer setFireDate:[NSDate distantFuture]]; } else if (!isRun) {#warning 恢复计时器 isRun = YES; [timer setFireDate:[NSDate date]]; }不等待计时器,立即执行延迟操作
[timer fire];
销毁/彻底取消计时器
#waring 此方法策底取消了Timer 不是暂停
[timer invalidate];
这里要说明一下,并不是只有invalidate方法才能销毁计时器,当repeats属性设为NO,计时器运行以后将会自动销毁.
那么参数呢? NSTimer的参数是userInfo,所以要使用userInfo方法才能提取到正确的参数
NSlog(@"sender:%@",[sender userInfo]);
3.GCD方法
特点:这个方法不限制线程,不容易取消操作.
为什么不能取消操作?代码交给了GCD自动进行处理,开发者不容易操作.
改变 (5 * NSEC_PER_SEC) 的数字就可改变延迟时间,单位是秒.
默认是在主线程,改变dispatch_get_main_queue() ------->dispath_get_global_queue() 就可让代码在子线程执行.
4.Sleep(NSThread)方法
特点:卡主当前线程来实现延迟操作,使用需谨慎. 有些时候,用起来还是很方便的.
[NSThread sleepForTimeInterval:3];
最好不要在主线程中使用,否则会卡住界面.
以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持。
声明:本页内容来源网络,仅供用户参考;我单位不保证亦不表示资料全面及准确无误,也不保证亦不表示这些资料为最新信息,如因任何原因,本网内容或者用户因倚赖本网内容造成任何损失或损害,我单位将不会负任何法律责任。如涉及版权问题,请提交至online#300.cn邮箱联系删除。
iOS-GCD介绍在开发过程中,我们有时会希望把一些操作封装起来延迟一段时间后再执行。iOS开发中,有两种常用的方法可以实现延迟执行,一种是使用GCD,另外一种
在Objective-C中延迟执行还是很常见的需求,通常有如下几种方式可供选择:performSelector:想要延迟调用某个方法:[selfperformS
Java使用agent实现main方法之前的实例详解创建Agent项目PreMainExecutor类,在main方法之前执行此方法publicclassPre
最近学习了延迟执行的几种方法,分享一下:1.performSelector(NSObject)方法2.NSTimer方法3.GCD方法4.sleep(NSThr
详解IOS中文件路径判断是文件还是文件夹方法1+(BOOL)isDirectory:(NSString*)filePath{BOOLisDirectory=NO