zoukankan      html  css  js  c++  java
  • ios开发--GCD使用介绍:4-延迟执行操作

    在开发过程中,我们有时会希望把一些操作封装起来延迟一段时间后再执行。iOS开发中,有两种常用的方法可以实现延迟执行,一种是使用GCD,另外一种是使用NSRunLoop类中提供的方法。

    1、使用GCD实现延迟执行

    在GCD中可以使用dispatch_after()函数,封装一段代码到block中,在设置的延迟时间(dispatch_time_t)之后执行。

    1. void dispatch_after( dispatch_time_t when, dispatch_queue_t queue, dispatch_block_t block);

    如下所示:在2.0秒后,输出一段日志。在该方法中,延迟执行的代码在主队列中执行,我们也可以修改执行的队列。

    1. dispatch_after(dispatch_time(DISPATCH_TIME_NOW, (int64_t)(2.0 * NSEC_PER_SEC)), dispatch_get_main_queue(), ^{
    2. NSLog(@"延迟2.0秒后打印出来的日志!");
    3. });

    2、使用NSRunLoop类中的方法实现延迟执行

    在NSRunLoop类中,也提供了有关延迟执行的方法。由于这些方法是对NSObject类的扩展,因此,所有的类都可以使用。

    1. @interface NSObject (NSDelayedPerforming)
    2.  
    3. - (void)performSelector:(SEL)aSelector withObject:(nullable id)anArgument afterDelay:(NSTimeInterval)delay inModes:(NSArray *)modes;
    4. - (void)performSelector:(SEL)aSelector withObject:(nullable id)anArgument afterDelay:(NSTimeInterval)delay;
    5.  
    6. @end

    下面的代码中也实现了延迟2秒打印一段日志的操作。

    1. - (void)viewDidLoad {
    2. [super viewDidLoad];
    3.  
    4. //延迟2秒执行printLog
    5. [self performSelector:@selector(printLog) withObject:nil afterDelay:2.0];
    6. }
    7.  
    8. -(void) printLog{
    9. NSLog(@"延迟2.0秒后打印出来的日志!");
    10. }
  • 相关阅读:
    数据库的......
    数据库
    XML
    网络编程
    I/O系统---流
    周结

    集合,框架
    Spring入门
    Java Wed
  • 原文地址:https://www.cnblogs.com/wanghuaijun/p/5338549.html
Copyright © 2011-2022 走看看