美文网首页
iOS延时执行测试

iOS延时执行测试

作者: coderSuper | 来源:发表于2018-04-04 17:36 被阅读15次
#import "Person.h"

@implementation Person

- (void)testLog {
    [self performSelector:@selector(logd) withObject:nil afterDelay:0];//1
    
    dispatch_after(dispatch_time(DISPATCH_TIME_NOW, (int64_t)(0 * NSEC_PER_SEC)), dispatch_get_main_queue(), ^{
        NSLog(@"c");
    });//2
    
    [self performSelector:@selector(logb)];//3
    
    NSLog(@"a");//4
}

- (void)logd {
    NSLog(@"d");
}

- (void)logb {
    NSLog(@"b");
}

@end
上面这段代码在OS命令行程序和iOS程序中运行结果完全不同 这是在OS命令行程序中结果 这是在iOS程序中运行结果

在iOS程序中运行结果的原理

  • performSelector:@selector(logb)
    知识点:告诉线程直接调用方法
  • -(void)performSelector:(SEL)aSelector withObject:(id)anArgument afterDelay:(NSTimeInterval)delay;
    知识点:这个方法是单线程的,也就是说只有当前调用此方法的函数执行完毕后,selector方法才会被调用。
  • dispatch_after能让我们添加进队列的任务延时执行,该函数并不是在指定时间后执行处理,而只是在指定时间追加处理到dispatch_queue

程序执行到//1的时候,系统会等待testlog全部执行完再延时0s执行logd方法;
执行到//2的时候,告诉主队列0s后添加logc任务到主队列;
执行到//3的时候,主线程直接执行logb方法,打印b;
执行到//4的时候,主线程直接打印a;
打印完a,将需要延时加入进队列的方法加进主队列,而(void)performSelector:(SEL)aSelector withObject:(id)anArgument afterDelay:(NSTimeInterval)delay需要等待当前函数testlog执行完才能调用,所以先加进队列的是logc,打印c;
打印完c,testlog函数全部执行完毕,执行logd方法,打印d。

如有错误,敬请指出。

相关文章

  • iOS延时执行测试

    在iOS程序中运行结果的原理 performSelector:@selector(logb)知识点:告诉线程直接调...

  • 技术贴:3.iOS中的延时执行

    延迟执行也叫做延时执行。在iOS中有三种延时执行方式: 1.调用NSObject的方法 [self perform...

  • iOS 延时执行的实现

    iOS中延时执行的4种方法

  • IOS3

    1、 2、iOS中常用的延时方法iOS常见的延时执行有2种方式调用NSObject的方法[self perform...

  • IOS-延时执行

    IOS中延时执行的几种方式的比较和汇总 本文列举了四种延时执行某函数的方法及其一些区别。假如延时1秒时间执行下面的...

  • 多线程----GCD的常用函数和单例模式

    线程间的通信 从子线程回到主线程 延时执行 iOS常见的延时执行有两种方式p 调用NSObject的方法 p 使用...

  • 关于GCD常用的方法

    iOS开发多线程篇—GCD的常见用法 一、延迟执行 1.介绍 iOS常见的延时执行有2种方式 (1)...

  • iOS开发-延时执行

    1.GCD 注:dispatch_after方法本质是将任务延时添加到队列中,并不是延时执行任务,所以在对时间要求...

  • GCD其它常用函数(四)

    一. 延迟执行 iOS常见的延时执行调用NSObject的方法 使用GCD函数(延迟并控制方法在哪个线程执行) 使...

  • iOS开发多线程篇—GCD的常见用法

    一、延迟执行 1.介绍 iOS常见的延时执行有2种方式 (1)调用NSObject的方法 [selfperform...

网友评论

      本文标题:iOS延时执行测试

      本文链接:https://www.haomeiwen.com/subject/csclhftx.html